Thành thạo REPL NodeJS trong 3 phút

Khi bạn chỉ cần viết một đoạn code nhanh mà không cần tạo file thì REPL sẽ giúp bạn việc đó. Giúp bạn nhanh chóng có kết quả mà không cần tạo bất kì file hay folder.


1039

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


Like it? Share with your friends!

1039