"Tách café" CoffeeScript đầu tiên của bạn, Phần 1: Bắt đầu

Đã có nhiều thông tin ồn ào xoay quanh CoffeeScript, một ngôn ngữ lập trình mới được xây dựng dựa trên JavaScript. CoffeeScript cung cấp một cú pháp rõ ràng nên rất hấp dẫn với những người thích Python hay Ruby. Nó cũng cung cấp nhiều tính năng lập trình hàm lấy cảm hứng từ các ngôn ngữ như Haskell và Lisp. CoffeeScript biên dịch thành JavaScript hiệu quả và ngoài việc chạy JavaScript trong một trình duyệt web, bạn có thể sử dụng nó với các công nghệ như Node.js cho các ứng dụng máy chủ. Trong phần đầu tiên của loạt bài bốn phần này, hãy bắt đầu với CoffeeScript và tìm hiểu những lợi ích dành cho nhà phát triển. Bạn sẽ thiết lập trình biên dịch CoffeeScript và sử dụng nó để tạo những đoạn mã sẵn sàng chạy trên trình duyệt hoặc máy chủ.

Michael Galpin, Kỹ sư phần mềm, Google

Michael_GalpinMichael Galpin là kỹ sư phần mềm tại Google. Ông là đồng tác giả của cuốn sách Android in iPractice và là người đóng góp thường xuyên cho developerWorks. Để xem những dự định tương lai của ông, mời bạn đọc blog hoặc theo dõi ông trên Twitter @michaelg hay Google+ Michael Galpin.



26 12 2012

Giới thiệu

Ngôn ngữ lập trình CoffeeScript được xây dựng dựa trên JavaScript và nó biên dịch thành JavaScript hiệu quả để bạn có thể chạy trên một trình duyệt web hoặc sử dụng với các công nghệ như Node.js cho các ứng dụng máy chủ. Việc biên dịch đơn giản và các đoạn mã JavaScript được tạo ra một cách phù hợp nhất. Trong bài viết này, hãy tìm hiểu về các tính năng của ngôn ngữ lập trình CoffeeScript. Sau khi cài đặt CoffeeScript và chạy trình biên dịch này, bạn sẽ thực hiện từng bước thông qua một ví dụ đơn giản có sử dụng CoffeeScript trong trang web.

Tải về mã nguồn được sử dụng trong bài này.


Sự hấp dẫn của CoffeeScript

Các chữ viết tắt thường dùng

  • NPM: Node Package Manager (Trình quản lý gói Node)
  • REPL: Read-Evaluate-Print-Loop (Vòng lặp đọc-tính toán-in)

Ngày nay, thật dễ dàng nhận thấy rằng JavaScript là ngôn ngữ lập trình quan trọng nhất. JavaScript là ngôn ngữ của trình duyệt và được tìm thấy ngày càng nhiều trong các ứng dụng máy tính để bàn và di động. Với sự phổ biến ngày càng tăng của Node.js, JavaScript đã trở thành một lựa chọn khả thi cho các ứng dụng máy chủ và hệ thống. Một số nhà phát triển kịch liệt chống lại JavaScript phần lớn là vì cú pháp không nhất quán và việc triển khai kỳ quặc của nó. Tuy nhiên, việc triển khai kỳ quặc đã được giảm bớt do các máy ảo JavaScript được tiêu chuẩn hóa nhiều hơn. Cú pháp không nhất quán có thể được giải quyết phần nào bởi sự tiến triển tiếp theo của JavaScript: ECMAScript.next, một tiêu chuẩn mới nổi chịu rất nhiều ảnh hưởng của CoffeeScript. Tuy nhiên, cho đến khi một tiêu chuẩn mới được thống nhất và được thực thi trong các máy ảo phổ biến thì còn nhiều vấn đề phải bàn trong việc cải thiện cú pháp của JavaScript.

Nếu bạn đang sử dụng JavaScript, CoffeeScript sẽ là một lựa chọn cám dỗ. Từ góc độ cú pháp, JavaScript đúng là một mớ hỗn độn. Nó có nhiều tính năng của các ngôn ngữ lập trình hàm và chịu nhiều ảnh hưởng của Scheme nói riêng. Tuy nhiên, Scheme có một cú pháp rất đơn giản được xây dựng trên các biểu thức-s. JavaScript áp dụng nhiều khái niệm như Scheme, nhưng lại không chung cú pháp với nó. Thay vào đó, JavaScript có cú pháp giống như C. Kết quả là một ngôn ngữ với các khái niệm hàm, nhưng lại có một cú pháp dài dòng mà không có cấu trúc tự nhiên để làm nổi bật những khái niệm này. Ví dụ, JavaScript cho phép các hàm bậc cao hơn, chẳng hạn như các hàm có các tham số đầu vào có thể chứa các hàm khác. Điều này vừa có ích, vừa mạnh mẽ và là một tính năng còn thiếu ở nhiều ngôn ngữ. Thế nhưng JavaScript có thể có một cú pháp không đẹp cho lắm như thể hiện trong Liệt kê 1 (Listing 1).

Liệt kê 1. JavaScript xấu xí
pmb.requestPaymentInfo('type', function(info){
    $('result').innerHTML = info.name;
});

Có rất nhiều sự rập khuôn trong ví dụ này—các dấu ngoặc đơn, các dấu phẩy, các dấu ngoặc nhọn, các dấu chấm phẩy và các từ khóa ngôn ngữ không thực sự cần thiết.

Công dụng chính của JavaScript là một ngôn ngữ ứng dụng web từ phía người dùng (web-client). Những bộ thư viện (frameworks) phát triển ứng dụng máy tính để bàn và di động như Cocoa, Windows® Forms, và Android, tất cả đều là hướng đối tượng. Hình mẫu hướng đối tượng không phải là hoàn hảo cho tất cả mọi thứ, nhưng nó rất thích hợp với các ứng dụng có một giao diện đồ họa. JavaScript cũng là một ngôn ngữ hướng đối tượng hoàn chỉnh có thừa kế, nhưng nó là ngôn ngữ kiểu nguyên mẫu—không phải là một ngôn ngữ dựa trên lớp như các ngôn ngữ được hầu hết các frameworks phát triển ứng dụng sử dụng. Như vậy, lập trình ứng dụng bằng JavaScript có thể rất mất công.

CoffeeScript giải quyết những điểm yếu chính của JavaScript:

  • Cung cấp một cú pháp đơn giản hơn, làm giảm sự rập khuôn, chẳng hạn như các dấu ngoặc đơn và các dấu phẩy.
  • Sử dụng khoảng trắng như là một cách để tổ chức các đoạn mã.
  • Cung cấp cú pháp đơn giản để thể hiện các hàm.
  • Cung cấp sự thừa kế dựa trên lớp (đó là tùy chọn, nhưng có thể rất có ích khi tiến hành phát triển ứng dụng).

Bạn có thể dự đoán rằng CoffeeScript, với một cú pháp trừu tượng, có thể có một số nhược điểm so với JavaScript. Ví dụ, CoffeeScript có chậm hơn nhiều so với JavaScript không hoặc nó có yêu cầu một thư viện nặng nề để chạy không? Trong thực tế, CoffeeScript biên dịch thành JavaScript rõ ràng, hiệu quả,. Bạn luôn có thể nhìn thấy chính xác nó đang biên dịch thành những gì, vì vậy bạn có thể yên tâm là không có gì được đưa vào quá mức. Và, vì CoffeeScript biên dịch thành JavaScript với đầy đủ tính năng, nên không cần dùng thêm bất kỳ một thư viện nào để chạy. CoffeeScript cung cấp một cú pháp cho phép bạn khai thác đầy đủ sức mạnh của JavaScript, với chi phí hoạt động tối thiểu về thời gian chạy chương trình.


Các điều kiện tiên quyết

Như đã đề cập, bạn có thể sử dụng CoffeeScript để viết các ứng dụng máy chủ và hệ thống chạy dựa trên Node.js. Mối quan hệ giữa CoffeeScript và Node.js thật ra còn mật thiế hơn. Để cài đặt CoffeeScript bạn cần cài đặt Node.js trước vì:

  • CoffeeScript được phân phối dưới dạng một gói Node.js khi sử dụng trình quản lý gói của Node, NPM.
  • CoffeeScript phải được biên dịch. Trình biên dịch của nó thực sự được viết bằng CoffeeScript và do đó, nó đòi hỏi phải có JavaScript runtime để làm công việc biên dịch. Máy ảo JavaScript V8 nằm trong nhân của Node.js hoàn toàn thích hợp cho nhiệm vụ này.

Để làm thực hành ví dụ trong bài này, bạn cần phải cài đặt Node.js.


Cài đặt

Đã bao giờ bạn mong muốn mình có thể chạy JavaScript từ dòng lệnh (command line - CMD) chưa? Tôi thì chưa, nhưng có lẽ CoffeeScript sẽ làm thay đổi điều đó. Với Node.js, bạn có thể chạy JavaScript từ dòng lệnh hoặc như là một phần của một kịch bản lệnh chạy được. Tính năng quan trọng này của Node.js cho phép mã CoffeeScript có thể chạy được từ dòng lệnh, cung cấp JavaScript runtime cần thiết cho trình biên dịch CoffeeScript (được viết bằng CoffeeScript).

Bước đầu tiên là cài đặt Node.js. Bạn có một số tùy chọn để cài đặt; bạn có thể biên dịch từ mã nguồn hoặc cài đặt từ tệp có sẵn cho các hệ thống khác nhau. Chạy node -v từ dòng lệnh (CMD) để chắc chắn rằng Node.js được cài đặt và có trên đường dẫn (Environment Path) của bạn.

Với Node.js bạn sẽ được tặng kèm: Trình quản lý gói node (NPM). Sau khi bạn đã chạy npm -v từ dòng lệnh để chắc chắn rằng NPM được cài đặt và ở trên đường dẫn (Environment Path) của mình, bạn có thể sử dụng NPM để cài đặt CoffeeScript như sau.

  1. Chạy npm install --global coffee-script từ dòng lệnh.

    Cờ --global làm cho CoffeeScript có sẵn trên toàn hệ thống chứ không phải chỉ dành cho một dự án cụ thể.

  2. Lệnh npm sẽ xuất ra kết quả tương tự như: /usr/bin/coffee -> /usr/lib/node_modules/coffee-script/bin/coffee.

    NPM tạo ra một lối tắt (shortcut) trong /usr/bin, vì thế bây giờ tệp coffee chạy được đang ở trên đường dẫn đúng. Đây là trình biên dịch và trình thông dịch CoffeeScript.

  3. Để kiểm tra xem tệp coffee chạy được có ở trên đường dẫn đó không, hãy chạy coffee -v từ dòng lệnh.

Còn một bước cuối cùng để bảo đảm rằng môi trường CoffeeScript được thiết lập đúng. Để làm cho CoffeeScript luôn luôn sẵn sàng cho bất kỳ tiến trình Node.js nào mà bạn khởi chạy, bạn cần phải thêm nó vào NODE_PATH của nó. Node.js sẽ xem xét NODE_PATH để tìm các mô đun (các thư viện) khi gặp phải các hàm chưa được chấp nhận.

Đối với ví dụ trong bài này, bạn sẽ sử dụng Node.js chủ yếu làm runtime cho các tệp CoffeeScript có thể chạy được. Cách tiếp cận dễ dàng nhất là chỉ cần thêm tất cả các mô đun NPM vào NODE_PATH. Để tìm xem các mô đun NPM được đặt ở đâu, hãy nhập vào lệnh npm ls -g. Bạn cần thêm một biến môi trường để trỏ NODE_PATH đến vị trí này. Ví dụ, nếu npm ls -g in ra /usr/lib, có nghĩa là các mô đun được đặt trong /usr/lib/node_modules. Để thiết lập một biến môi trường NODE_PATH, hãy chạy lệnh export NODE_PATH=/usr/lib/node_modules.

Bạn có thể làm mọi thứ nhanh hơn bằng cách đặt các lệnh trên vào một tệp kịch bản lệnh khởi động (ví dụ ~/.bash_profile). Để kiểm tra các thay đổi, hãy khởi động một trình vỏ (shell) Node.js bằng cách chạy Node, rồi gõ require('coffee-script'). Trình vỏ Node.js sẽ nạp thư viện CoffeeScript. Nếu nó hoạt động, môi trường CoffeeScript của bạn đã sẵn sàng để chạy. Bây giờ bạn có thể bắt đầu khám phá CoffeeScript bằng cách bắt đầu với trình biên dịch.


Trình biên dịch

Dễ dàng chạy trình biên dịch CoffeScript bằng câu lệnh coffee -c, sẽ khởi chạy vòng lặp đọc-tính toán-in ra (REPL). của CoffeeScript. Để chạy trình biên dịch, bạn cần phải chuyển cho nó một tệp CoffeeScript mà bạn muốn biên dịch. Hãy tạo ra một tệp có tên là cup0.coffee và dán các nội dung của Liệt kê 2 vào trong tệp đó.

Liệt kê 2. Tệp cup 0
for i in [0..5]
    console.log "Hello #{i}"

Bạn có thể đoán xem hai dòng mã trong Liệt kê 2 sẽ làm gì. Liệt kê 3 cho thấy kết quả đầu ra khi chạy coffee cup0.coffee.

Liệt kê 3. Chạy CoffeeScript đầu tiên của bạn
$ coffee cup0.coffee 
Hello 0
Hello 1
Hello 2
Hello 3
Hello 4
Hello 5

Để có được cái nhìn tốt hơn về những gì đang xảy ra, hãy thử chạy trình biên dịch. Nhập coffee -c cup0.coffee, để tạo ra một tệp có tên là cup0.js. Liệt kê 4 cho thấy nội dung của tệp cup0.js.

Liệt kê 4. Tệp JavaScript cup 0
(function() {
    var i;
    for (i = 0; i <= 5; i++) {
        console.log("Hello " + i);
    }
}).call(this);

Một lợi ích của CoffeeScript là ở chỗ, ngoài việc nó cung cấp một cú pháp đẹp hơn so với JavaScript, nó còn biên dịch thành JavaScript rất đơn giản, hợp lý. Bạn có thể tự hỏi tại sao tất cả mã được gói trong một hàm. Đó là vì JavaScript chỉ hỗ trợ phạm vi mức hàm. Bằng cách gói mọi thứ trong một hàm, bạn chắc chắn rằng biến chỉ có phạm vi trong hàm đó và không trở thành biến chung (hoặc vô tình làm thay đổi một biến chung sẵn có).

Tạo một tệp mới, đặt têm cup1.coffee và nhập vào đoạn mã phức tạp hơn một chút như Liệt kê 5.

Liệt kê 5. Tệp cup 1
stdin = process.openStdin()
stdin.setEncoding 'utf8'

stdin.on 'data', (input) -> 
    name = input.trim() 
    process.exit() if name == 'exit' 
    console.log "Hello #{name}"
    console.log "Enter another name or 'exit' to exit"
console.log 'Enter your name'

Chương trình trong Liệt kê 5 nhắc người dùng nhập vào tên của họ, rồi chào mừng họ một cách thích hợp. JavaScript không có bất kỳ thư viện có sẵn nào để đọc từ đầu vào tiêu chuẩn, nhưng Node.js lại có. Đây là một ví dụ khác về việc lợi dụng sự cộng sinh của CoffeeScript/Node.js. Trong các ngôn ngữ như C, việc đọc từ đầu vào tiêu chuẩn là một cuộc chặn gọi. Không có mã nào có thể chạy được cho đến khi việc đọc từ đầu vào tiêu chuẩn kết thúc. Nếu bạn đã quen thuộc với Node.js, bạn biết mình không thể làm mọi thứ như vậy; Node.js không cho phép chặn Vào/ra (I/O). Thay vào đó, bạn phải đăng ký gọi lại với stdin.on.

Chạy coffee -c cup1.coffee để xem JavaScript mà trình biên dịch CoffeeScript tạo ra, như trong Liệt kê 6.

Liệt kê 6. Tệp JavaScript cup 1
(function() {
    var stdin;
    stdin = process.openStdin();
    stdin.setEncoding('utf8');
    stdin.on('data', function(input) {
        var name;
        name = input.trim();
        if (name === 'exit') { 
            process.exit();
        }
        console.log("Hello " + name);
        return console.log("Enter another name or 'exit' to exit");
    });
   console.log('Enter your name');
}).call(this);

Hàm stdin.on sử dụng một định dạng kết buộc sự kiện điển hình. Bạn chỉ rõ loại sự kiện ('data') bạn muốn nghe, sau đó cung cấp cho nó một hàm gọi lại để thực hiện khi bắt đầu sự kiện. Trong JavaScript đã biên dịch, bạn sẽ thấy JavaScript dài dòng điển hình dùng để tạo ra một hàm nội bộ và gọi tới hàm khác. Hãy so sánh với CoffeeScript tương đương. Có phải nó đã giúp bạn tránh được tất cả các dấu ngoặc đơn, các dấu ngoặc nhọn, các dấu chấm phẩy và các từ khóa không?

Bây giờ bạn biết cách để biên dịch các chương trình CoffeeScript, phần tiếp theo hãy xem xét một trong những tính năng có ích nhất để học CoffeeScript: Đó là REPL.


REPL

REPL là một công cụ tiêu chuẩn được tìm thấy trong nhiều ngôn ngữ lập trình, đặc biệt là họ ngôn ngữ lập trình hàm. REPL tương đương với IRB của Ruby. Chỉ cần nhập coffee sẽ khởi chạy REPL của CoffeeScript. Ví dụ, hãy thử nghiệm với tính năng này của CoffeeScript và giải quyết các vấn đề đơn giản, như trong Liệt kê 7.

Liệt kê 7. Sử dụng REPL
coffee> nums = [1..10]
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
coffee> isOdd = (n) -> n % 2 == 1
[Function]
coffee> odds = nums.filter isOdd
[ 1, 3, 5, 7, 9 ]
coffee> odds.reduce (a,b) -> a + b
25

Mỗi khi bạn nhập một biểu thức vào REPL, nó sẽ tính toán biểu thức đó, in kết quả và sau đó chờ biểu thức tiếp theo. Ví dụ này định nghĩa một biến được gọi là nums với dải giá trị từ 1 đến 10. REPL in ra giá trị của biến vừa mới được định nghĩa. Tính năng này có thể có ích ngay lập tức. Có lẽ bạn không nhớ liệu dải số mà bạn đã định nghĩa có bao gồm (bao gồm số cuối cùng—trong trường hợp này là 10)—hoặc không bao gồm số cuối cùng hay không. REPL cho bạn thấy rằng số 10 được tính đến, vì vậy nó là một dải số bao gồm số cuối cùng. Nếu bạn muốn có một dải số không bao gồm số cuối cùng, bạn chỉ cần sử dụng nums = [1...10].

Tiếp theo định nghĩa hàm isOdd. CoffeeScript có cú pháp rất ngắn gọn cho các khai báo hàm, đó là một tính năng đẹp nếu biết rằng bản chất của JavaScript là hàm. Trong ví dụ này, REPL chỉ đơn giản hiển thị [Function] để cho bạn biết rằng biến isOdd có đủ khả năng như một hàm. Sau đó, một biến mới là odds được khai báo. Bạn nhận được giá trị của odds bằng cách gọi hàm lọc trên nums và chuyển vào isOdd. Việc này tạo ra một mảng mới có các phần tử của nó phải sinh ra kết quả là đúng khi được chuyển tới cho isOdd. Hàm reduce được gọi trên odds. Việc chuyển vào một hàm sẽ cộng thêm từng giá trị của mảng vào tổng số trước đó, đó là tính tổng các giá trị trong mảng và REPL hiển thị tổng số là 25.

Phần tiếp theo trình bày một chủ đề gần gũi và thân thiết với bất kỳ nhà phát triển JavaScript nào: việc tạo kịch bản lệnh trong trình duyệt.


Ví dụ web đơn giản

Bạn đã biết cách làm thế nào có thể viết các tệp CoffeeScript và biên dịch chúng thành JavaScript, và tất nhiên, sau đó có thể sử dụng trong một ứng dụng web. Với các mục đích phát triển, có một cách dễ dàng hơn. Trình biên dịch CoffeeScript có thể chạy bên trong trình duyệt, cho phép bạn sử dụng CoffeeScript trực tiếp trong một trang web. Tuy nhiên, nếu bạn đang xây dựng một ứng dụng web đòi hỏi hiệu năng cao thì không nên dùng CoffeeScript. Trình biên dịch CoffeeScript là một tệp lớn; việc phải biên dịch CoffeeScript của bạn trong lúc đang chạy chắc chắn sẽ làm chậm mọi thứ. CoffeeScript có cung cấp một cách dễ dàng để phát triển ứng dụng của bạn với một "con đường dẫn đến sản xuất" rõ ràng.

CoffeeScript không phải là một bộ công cụ hoặc framework JavaScript. Nó là một ngôn ngữ lập trình và, do đó, không bao gồm nhiều hàm tiện lợi liên quan đến DOM. Tuy nhiên, bạn có thể sử dụng CoffeeScript với bộ công cụ yêu thích của mình. Sự kết hợp phổ biến nhất là sử dụng nó với jQuery. Liệt kê 8 cho thấy một trang web đơn giản sử dụng jQuery và CoffeScript.

Liệt kê 8. CoffeeScript trong một trang web
<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">
</script>
    <script
 src="http://jashkenas.github.com/coffee-script/extras/coffee-script.js">
 </script>
    <script type="text/coffeescript">
        gcd = (a,b) -> if (b==0) then a else gcd(b, a % b)
        $("#button").click -> 
            a = $("#a").val() 
            b = $("#b").val() 
            $("#c").html gcd(a,b)
    </script>
</head>
<body>
    A: <input type="text" id="a"/><br/>
    B: <input type="text" id="b"/><br/>
    <input type="button" value="Calculate GCD" id="button"/> <br/>
    C: <span id="c"/>
</body>
</html>

Trang web này sử dụng thư viện Ajax của Google để tải jQuery. Nó tải thư viện trình biên dịch CoffeeScript từ kho lưu trữ Github của Jeremy Ashkenas, người tạo nên CoffeeScript (xem phần Tài nguyên). Tiếp theo mã này có một khối kịch bản lệnh. Thay vì khối kịch bản lệnh đang có kiểu text/javascript, khối kịch bản lệnh này lại có kiểu text/coffeescript, đó là lý do mà trình biên dịch CoffeeScript biết để biên dịch các nội dung của kịch bản lệnh. Sau đó kịch bản lệnh tạo ra một hàm tên là gcd để tính toán ước số chung lớn nhất của hai số nguyên. jQuery được dùng để tạo ra một trình xử lý nhấn chuột (click handler) cho nút nhấn (button) trên trang web. Trong trình xử lý này, bạn sẽ nhận được các giá trị của hai trường đầu vào kiểu văn bản và chuyển chúng đến hàm gcd. Kết quả này được in trở lại trang web. Các hàm như $(), val()html() là các hàm jQuery, nhưng chúng có thể dễ dàng được dùng với CoffeeScript và tận dụng lợi thế cú pháp rõ ràng của CoffeeScript.


Kết luận

Trong bài này, bạn có một chuyến khám phá nhanh về CoffeeScript. Với môi trường phát triển của bạn đã thiết lập và đang chạy, bây giờ bạn có thể khám phá CoffeeScript bằng cách sử dụng REPL. Bạn đã học cách sử dụng trình biên dịch để xem nó tạo ra loại JavaScript nào và cũng đã học cách viết CoffeeScript và chạy nó trực tiếp trong các trang web của bạn. Các ví dụ này đã cung cấp một chút hương vị về cú pháp CoffeeScript, mặc dù thường không có nhiều giải thích.

Phần 2 của loạt bài này sẽ đi sâu vào các chi tiết về các khái niệm quan trọng của CoffeeScript.


Tải về

Mô tảTênKích thước
Article source codecs1.zip1KB

Tài nguyên

Học tập

Lấy sản phẩm và công nghệ

Thảo luận

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Nguồn mở
ArticleID=853395
ArticleTitle="Tách café" CoffeeScript đầu tiên của bạn, Phần 1: Bắt đầu
publish-date=12262012