Contents
REPL là gì ?
REPL là từ viết tắt của Read Eval Print Loop (hiểu nôm na là: Đọc – Đánh giá – In – Lặp) và nó biểu diễn môi trường máy tính như màn hình console trong Linux shell nơi bạn có thể gõ các dòng lệnh và hệ thống sẽ trả về các kết quả. NodeJS cũng có môi trường REPL. Nó để thực hiện các tác vụ mong muốn:
Read: Đọc các thông tin input của người dùng, chuyển đổi thành các dữ liệu Javascript và lưu trữ trong bộ nhớ.
Eval: Đánh giá các cấu trúc dữ liệu này.
Print: In các kết quả.
Loop: Lặp các dòng lệnh đến khi người dùng gõ ctrl-c hai lần.
Đặc tính REPL của Node js rất hữu ích khi bạn sử dụng Node.js với mục đích
Start và Stop REPL
Điều kiện đầu tiên là bạn đã cài đặt NodeJS. Nếu chưa cài đặt, hãy đọc ngay Cài đặt NodeJS chi tiết trên Window và Ubuntu
Nếu bạn đã cài đặt node, thì bạn cũng có REPL NodeJS. Để start, chỉ cần nhập node trong terminal
node
Kết quả sẽ như sau
>
Biểu tượng “>” cho bạn biết rằng bạn có thể nhập code JavaScript có thể chạy ngay qua ví dụ sau
Ví dụ: thử thêm hai số trong REPL bằng cách sau
> 2 + 2
Khi bạn nhấn ENTER, REPL code sẽ bạn sẽ run biểu thức và trả về:
4
Để thoát REPL, bạn có thể nhập .exit hoặc nhấn CTRL + D một lần hoặc nhấn CTRL + C hai lần, điều này sẽ đưa bạn trở lại dấu nhắc shell.
Với việc start và stop, hãy cùng xem cách bạn có thể sử dụng REPL để thực thi code NodeJS đơn giản.
Thực thi Code trong NodeJS REPL
REPL là cách nhanh nhất để kiểm tra code JavaScript mà không phải tạo tệp. Hầu như mọi biểu thức JavaScript hoặc NodeJS hợp lệ đều có thể được thực thi trong REPL.
Ở bước trước bạn đã thử cộng hai số, bây giờ hãy để phép thử chia. Để làm như vậy, start một REPL mới:
node
Nhập như sau
> 10 / 5
Nhấn ENTER và output sẽ là 2, như mong đợi:
2
REPL cũng có thể xử lý các hoạt động trên chuỗi. Nối các chuỗi trong REPL của bạn bằng cách nhập:
> "Hello " + "World"
Một lần nữa, nhấn ENTER và biểu thức chuỗi đã được thực thi:
'Hello World'
Lưu ý: Bạn có thể nhận thấy rằng output đã sử dụng dấu ngoặc đơn thay vì dấu ngoặc kép. Trong NodeJS, các dấu ngoặc được sử dụng cho một chuỗi không ảnh hưởng đến giá trị của nó. Nếu chuỗi bạn đã nhập sử dụng dấu ngoặc đơn, REPL đủ thông minh để sử dụng dấu ngoặc kép ở đầu ra.
Calling Functions
Khi viết NodeJS, nó thường in message thông qua phương thức console.log toàn cầu hoặc một chức năng tương tự. Ví dụ sau:
> console.log("Hi")
Nhấn ENTER, và output được xuất ra
Hi
undefined
Kết quả đầu tiên là đầu ra từ console.log, sẽ in một message tới luồng stdout (màn hình). Vì console.log in một chuỗi thay vì trả về một chuỗi, message được nhìn thấy mà không có dấu ngoặc kép. Giá trị không xác định là giá trị trả về của hàm.
Tạo biến
Hiếm khi bạn chỉ làm việc với chữ trong JavaScript. Tạo một biến trong REPL hoạt động theo cách tương tự như làm việc với các file .js. Ví dụ sau
> let age = 30
Nhấn ENTER kết quả sẽ như sau:
undefined
Giống như trước đây, với console.log, giá trị trả về của lệnh này là undefined. Biến age sẽ có sẵn cho đến khi bạn thoát khỏi phiên REPL. Ví dụ, bạn có thể nhân tuổi lên hai. Tiếp tục câu lệnh sau tại terminal
> age * 2
Kết quả sẽ như sau
60
Vì REPL trả về giá trị, bạn không cần sử dụng console.log hoặc các chức năng tương tự để xem đầu ra trên màn hình. Theo mặc định, mọi giá trị được trả về sẽ xuất hiện trên màn hình.
Multi-line Blocks
Multi-line Blocks(Đoạn code nhiều dòng) cũng được hỗ trợ. Ví dụ: bạn có thể tạo một hàm cộng 3 vào một số đã cho. Bắt đầu với ví dụ như sau
> const add3 = (num) => {
Sau đó, nhấn ENTER sẽ thay đổi > thành:
...
REPL nhận thấy một dấu ngoặc nhọn mở ‘{‘ và do đó giả sử bạn đang viết nhiều hơn một dòng mã cần được thụt lề. Để dễ đọc hơn, REPL thêm 3 dấu chấm và khoảng trắng trên dòng tiếp theo, do đó đoạn code sau dường như được thụt vào.
Nhập dòng thứ hai và thứ ba của hàm, mỗi dòng một lần, nhấn ENTER sau mỗi dòng:
... return num + 3;
... }
Nhấn ENTER sau dấu ngoặc nhọn đóng ‘ } ‘ sẽ hiển thị undefined, đó là “return value” của một phép gán hàm cho một biến. Dấu … đã biến mất và dấu “>” hiện trở lại
undefined
>
Bây giờ, gọi add3 () trên một giá trị:
> add3(10)
Theo dự kiến, output là:
13
Bạn có thể sử dụng REPL để thử các đoạn code NodeJS trước khi đưa chúng vào các project của mình. REPL cũng bao gồm một số phím tắt tiện dụng để làm cho quá trình đó dễ dàng hơn.
Master Shortcuts REPL
REPL cung cấp các shortcut (phím tắt) để giảm thời gian code khi có thể. Nó giữ một lịch sử của tất cả các lệnh đã nhập và cho phép xem chúng và lặp lại một lệnh nếu cần thiết.
Ví dụ: nhập chuỗi sau:
"The answer to life the universe and everything is 32"
Kết quả như sau
'The answer to life the universe and everything is 32'
Nếu chúng tôi muốn chỉnh sửa chuỗi và thay đổi chuỗi 32 và thành 42, tại dấu “>” hãy sử dụng phím mũi tên LÊN để quay lại lệnh trước đó:
> "The answer to life the universe and everything is 32"
Di chuyển con trỏ sang trái, xóa 3, nhập 4 và nhấn ENTER lại:
'The answer to life the universe and everything is 42'
Tiếp tục nhấn phím mũi tên LÊN và bạn sẽ quay lại lịch sử của mình cho đến khi lệnh được sử dụng đầu tiên trong phiên REPL hiện tại. Ngược lại, nhấn DOWN sẽ lặp lại các lệnh gần đây hơn trong lịch sử.
Khi bạn hoàn thành việc điều khiển lịch sử lệnh của mình, hãy nhấn DOWN liên tục cho đến khi bạn sử dụng hết lịch sử lệnh gần đây.
Để nhanh chóng nhận được giá trị cuối cùng, hãy sử dụng ký tự gạch dưới. Tại >, nhập gạch dưới “_” và nhấn ENTER:
> _
Chuỗi đã nhập trước đó sẽ xuất hiện lại:
'The answer to life the universe and everything is 42'
REPL cũng có tự động hoàn thành các hàm, biến và từ khóa. Nếu bạn muốn tìm căn bậc hai của một số bằng hàm Math.sqrt, hãy nhập một vài chữ cái đầu tiên, như sau:
> Math.sq
Sau đó nhấn phím TAB và REPL sẽ tự động hoàn thành chức năng:
> Math.sqrt
Nếu có nhiều hàm thì chúng ta cần nhấn 2 lần TAB, nó sẽ hiện ra list như sau
> Math.
Math.__defineGetter__ Math.__defineSetter__ Math.__lookupGetter__
Math.__lookupSetter__ Math.__proto__ Math.constructor
Math.hasOwnProperty Math.isPrototypeOf Math.propertyIsEnumerable
Math.toLocaleString Math.toString Math.valueOf
Math.E Math.LN10 Math.LN2
Math.LOG10E Math.LOG2E Math.PI
Math.SQRT1_2 Math.SQRT2 Math.abs
Math.acos Math.acosh Math.asin
Math.asinh Math.atan Math.atan2
Math.atanh Math.cbrt Math.ceil
Math.clz32 Math.cos Math.cosh
Math.exp Math.expm1 Math.floor
Math.fround Math.hypot Math.imul
Math.log Math.log10 Math.log1p
Math.log2 Math.max Math.min
Math.pow Math.random Math.round
Math.sign Math.sin Math.sinh
Math.sqrt Math.tan Math.tanh
Math.trunc
Tùy thuộc vào kích thước màn hình của bạn, output có thể được hiển thị với số lượng hàng và cột khác nhau. Đây là danh sách tất cả các hàm và thuộc tính có sẵn trong mô-đun Math.
Nhấn CTRL + C để đến một dòng mới trong prompt mà không thực hiện những gì trong dòng hiện tại.
Sử dụng câu lệnh REPL
REPL có các từ khóa cụ thể để giúp kiểm soát hành vi của nó. Mỗi lệnh bắt đầu bằng một dấu chấm ‘.’
.help
Để liệt kê tất cả các lệnh có sẵn, hãy sử dụng lệnh .help:
> .help
Có rất nhiều, và chúng rất hữu ích để hoàn thành công việc trong REPL:
.break Sometimes you get stuck, this gets you out
.clear Alias for .break
.editor Enter editor mode
.exit Exit the repl
.help Print this help message
.load Load JS from a file into the REPL session
.save Save all evaluated commands in this REPL session to a file
Press ^C to abort current expression, ^D to exit the repl
Nếu bạn quên một lệnh, bạn luôn có thể tham khảo .help để xem nó làm gì.
.break/.clear
Sử dụng .break hoặc .clear, nó dễ dàng thoát khỏi biểu thức nhiều dòng. Ví dụ: bắt đầu một vòng lặp for như sau:
> for (let i = 0; i < 100000000; i++) {
Để thoát khỏi việc nhập thêm bất kỳ dòng nào, thay vì nhập dòng tiếp theo, hãy sử dụng lệnh .break hoặc .clear để thoát ra:
... .break
Bạn sẽ được như sau
>
REPL sẽ chuyển sang một dòng mới mà không thực hiện bất kỳ mã nào, tương tự như nhấn CTRL + C.
.save và .load
Lệnh .save lưu trữ tất cả code bạn đã chạy kể từ khi bắt đầu REPL, thành một tệp. Lệnh .load chạy tất cả code JavaScript từ một tệp bên trong REPL.
Thoát phiên bằng lệnh .exit hoặc bằng phím tắt CTRL + D. Bây giờ bắt đầu một REPL mới với NodeJS. Bây giờ chỉ có code bạn sắp viết sẽ được lưu.
Tạo một mảng fruits:
> fruits = ['banana', 'apple', 'mango']
Trong dòng tiếp theo, REPL sẽ hiển thị:
[ 'banana', 'apple', 'mango' ]
Lưu biến này vào một file mới, fruit.js:
> .save fruits.js
Và được save như sau
Session saved to: fruits.js
File được lưu trong cùng thư mục nơi bạn đã mở REPL của NodeJS. Ví dụ: nếu bạn đã mở REPL trong thư mục chính của bạn, thì tệp của bạn sẽ được lưu trong thư mục chính đó
Thoát khỏi phiên và bắt đầu REPL mới với node. Tại >, load tệp Fruits.js bằng cách nhập:
> .load fruits.js
Kết quả như sau
fruits = ['banana', 'apple', 'mango']
[ 'banana', 'apple', 'mango' ]
Lệnh .load đọc từng dòng mã và thực thi nó, như mong đợi của trình thông dịch JavaScript. Bây giờ bạn có thể sử dụng biến fruits như thể nó có sẵn trong phiên hiện tại mọi lúc.
Nhập lệnh sau và nhấn ENTER:
> fruits[1]
REPL sẽ xuất ra:
'apple'
Bạn có thể tải bất kỳ file JavaScript hoawjc NodeJS nào bằng lệnh .load, không chỉ các mục bạn đã lưu. Hãy nhanh chóng suwr dujng bằng cách mở trình soạn thảo code ưa thích hoặc nano, trình chỉnh sửa dòng lệnh và tạo một file mới có tên peanuts.js:
nano peanuts.js
Bây giờ file đã mở, hãy nhập như sau:
console.log('I love peanuts!');
Lưu và thoát nano bằng cách nhấn CTRL + X.
Trong cùng thư mục nơi bạn đã lưu peanuts.js, hãy khởi động REPL của NodeJS bằng node. Tải peanuts.js trong phiên của bạn:
> .load peanuts.js
Lệnh .load sẽ thực thi câu lệnh console duy nhất và hiển thị output sau:
console.log('I love peanuts!');
I love peanuts!
undefined
>
Khi việc sử dụng REPL của bạn kéo dài hơn dự kiến hoặc bạn tin rằng bạn có một đoạn code thú vị đáng để chia sẻ hoặc khám phá sâu hơn, bạn có thể sử dụng các lệnh .save và .load để thực hiện cả hai mục tiêu đó.
Kết luận
REPL là một môi trường tương tác cho phép bạn thực thi mã JavaScript mà không cần phải ghi nó vào một tệp.
Tham khảo thêm về NodeJS : Những cách tối ưu code NodeJS nên biết

Bài viết này được sưu tầm và tổng hợp từ nhiều nguồn trên Internet.
Nếu có gì không hiểu thì inbox messenger bên dưới mình hỗ trợ thêm nhé.