Cấp bậc tác giả:

HTML

Giới thiệu node.js và CoffeeScript

Được viết bởi QuangIT ngày 20/09/2012 lúc 03:09 PM
node.js đang là công nghệ rất hot hiện nay. Từ lúc ra đời (2009) đến lúc hot node.js chỉ mất khoảng vài tháng.
  • 0
  • 8096

Giới thiệu node.js và CoffeeScript

node.js đang là công nghệ rất hot hiện nay. Từ lúc ra đời (2009) đến lúc hot node.js chỉ mất khoảng vài tháng. Điều này có lẽ chỉ có thể giải thích bằng lí do là viết cả client side và lẫn server side của cùng một trang   web chỉ bằng một ngôn ngữ là ước mơ tối cao của giới làm web. Bài viết này xin giới thiệu node.js và CoffeeScript.

Mọi chuyện bắt đầu từ V8

V8 là JavaScript Engine của trình duyệt Google Chrome. Khi V8 ra đời, nó đã tạo ra cuộc cách mạng cho các trình duyệt, bởi vì tốc độ của nó nhanh gấp vài lần tốc độ của JavaScript engine của Firefox, Safari v.v. Điều này ép các trình duyệt khác phải cải tiến tăng tốc độ, dẫn đến kết quả là trong khoảng 2 năm vừa qua tốc độ của các trình duyệt đã cải thiện đáng kể.

Nếu đã xem Hội thảo Google I/O năm nay và khoái Chromebook, thì bạn nên biết rằng Chromebook dùng Chromium OS, mà hệ điều hành này được V8 chống lưng. YES! Cả đống cơ hội công việc, tiền bạc liên quan đến JavaScript đang rộng mở trước mắt!

node.js

Đó là ở client side. Ở server side có cuộc cách mạng khác.

Một số lập trình viên web nhạy bén đã chớp thời cơ dựa trên V8 viết ngay ra node.js để dùng JavaScript làm server side, đưa JavaScript lên ngang tầm với Ruby, Python, PHP, Perl v.v. node.js ra đời có thể gọi là đúng  lúc (thiên thời: cùng với V8 hàng loạt những thứ nhấn mạnh vai trò của JavaScript ra đời: HTML5, smartphone, tablet v.v.). Trước node.js đã có vài cố gắng để đưa JavaScript thành ngôn ngữ lập trình chủ đạo (mainstream) cho server side, nhưng không thành công.

Dùng JavaScript để viết có nhiều cái hay. Ví dụ đơn giản (và quá khích{#emotions_dlg.cool}) là có thể tuyển một phát 1000 nhân viên, rồi huấn luyện đồng loạt JavaScript. Xong, những nhân viên này có thể làm ào ào cả client side lẫn server side. Với 1000 nhân viên và công nghệ mang tính xuyên suốt thế này chống lưng, chẳng mấy chốc công ty sẽ thành number 1.

Điểm lôi cuốn nhất đập ngay vào mắt là node.js chủ trương lập trình web theo phong cách non-blocking I/O, một server có thể giữ cả trăm ngàn kết nối cùng lúc. Đây là khả năng sống còn cho những trang web cần tính   năng realtime hiện đại, mà tính năng này lại là xu hướng thời đại, khi mạng nhanh, smartphone, tablet ra đời ào ào.

Ví dụ chương trình hello.js dùng node.js:

var http = require('http');


http.createServer(function (request, response) {

response.writeHead(200, {'Content-Type': 'text/plain'});

response.end('Hello World\n');

}).listen(8000);


console.log('Server running at http://127.0.0.1:8000/');

node.js có chương trình npm để quản lí thư viện (giống gem của Ruby, cpan của Perl v.v.). Chỉ mới ra đời một thời gian ngắn, nhưng nhờ JavaScript phổ biến và nhiều người quan tâm đến việc dùng JavaScript làm server side, nên chẳng mấy chốc node.js đã có rất nhiều thư viện.

Giả sử bạn dùng Mac OS. Để cài node.js và npm:

Cài Xcode từ đĩa DVD cài Mac OS để có các chương trình gcc v.v.
Cài MacPorts, cách làm việc của nó là khi cài package gì nó sẽ tải mã nguồn của package đó về, rồi dùng chương trình gcc v.v. để biên dịch
Từ Terminal chạy lệnh: sudo port install nodejs, máy sẽ có thêm lệnh node, muốn chạy chương trình trên thì gõ lệnh: node hello.js
Từ Terminal chạy lệnh: curl http://npmjs.org/install.sh | sudo sh, máy sẽ có thêm lệnh npm, muốn cài thư viện xxx gì của node.js gì thì chạy lệnh: sudo npm install -g xxx

Nhìn sơ qua, node.js chỉ là một thư viện của JavaScript, giống như Twisted của Python hoặc EventMachine của Ruby. Nhưng nhìn kĩ, node.js là cả một platform với 4 sức mạnh:

Ngôn ngữ phổ biến (100% lập trình viên web đều phải biết JavaScript, ngay cả PHP cũng làm quách gì đạt số phiếu bầu tuyệt đối thế này{#emotions_dlg.tongue_out}), dễ học, uyển chuyển (ngôn ngữ script)
Tốc độ nhanh (nhờ V8)
Paradigm mới (non blocking I/O)
Nhiều thư viện, dễ cài (nhờ npm)

CoffeeScript

CoffeeScript là cả một câu chuyện thú vị khác.

Javascript thì cũng dễ học nhưng cũng không dễ master, dạy viết Javascript thì nhanh nhưng mà để rành rẽ ngôn ngữ functionnal thì mất thêm thời gian

Trên đây là nhận xét của anh Nguyễn Duy Thọ, lập trình viên lâu năm kinh nghiệm về JavaScript. JavaScript dễ học, nắm được một số bí quyết như hàm cũng là biến (còn gọi là tính chất functional, hay first-class function, vì hàm được coi như biến bình thường như bao biến khác) là lập trình được ào ào. Tuy nhiên đi sâu vào sẽ phát hiện một số chỗ có nhiều ngóc ngách (như chỉ đơn giản là khai báo class mà có đến ba bốn cách), cú pháp hơi cổ (gần 20 năm rồi).

Để mở đường tiến lên, người ta đã nghĩ ra CoffeeScript. Đây là cách chơi chữ rất thâm thuý: java thì mới chỉ là hạt cafe nguyên liệu thô, còn coffee là thành phẩm cuối cùng đã qua nhiều công đoạn chế biến, chỉ giữ lại cái tinh tuý nhất, sẵn sàng mang ra uống. Chính thế, cú pháp của CoffeeScript là rút tỉa kinh nghiệm 20 năm qua từ JavaScript, Python, và Ruby, giúp lập trình ít sai sót hơn, tốc độ nhanh hơn (chương trình CoffeeScript thường gắn gọn chỉ bằng 1/2 đến 2/3 chương trình JavaScript).

Chương trình trên viết lại thành hello.coffee:

http = require('http')


http.createServer((req, res) ->

res.writeHead(200, {'Content-Type': 'text/plain'})

res.end('Hello World\n')

).listen(8000)


console.log('Server running at http://127.0.0.1:8000/')

Muốn chạy:

Chạy lệnh để cài CoffeeScript: sudo npm install coffee-script, máy sẽ có thêm lệnh coffee
Chạy lệnh: coffee hello.coffee

Lệnh coffee sẽ biến đổi chương trình CoffeeScript thành chương trình JavaScript rồi dùng lệnh node để chạy.

Chương trình trên quá ngắn để thấy rằng chương trình CoffeeScript, ít nguy cơ sai sót hơn, ngắn gọn hơn chương trình JavaScript. Tuy nhiên nó cũng cho thấy cú pháp CoffeeScript rất giống cú pháp JavaScript. CoffeeScript không phải là cái gì hoàn toàn xa lạ, nên bạn hãy mạnh dạn học và sử dụng! Để học cú pháp CoffeeScript, hãy trang chủ của nó để xem tóm tắt và vào Wikipedia, kéo xuống dưới cùng sẽ thấy liên kết đến một số sách miễn phí.

4 OOP

Ví dụ khác, vì CoffeeScript đưa ra cách khai báo class, nên mọi người sẽ đều thống nhất theo cách này, đọc mã nguồn của nhau sẽ dễ hơn, tránh lung tung mỗi người khai báo class một kiểu.

class Animal

constructor: (@name) ->


talk: ->

console.log("Animal can talk!")


class Cat extends Animal

talk: ->

console.log("Meow, my name is #{@name}")


class Dog extends Animal

talk: ->

console.log("Wolf, my name is #{@name}")


class Zoo

constructor: ->

@animals = []


add: (animal) ->

@animals.push(animal)


remove: (animal) ->

@animals = @animals.filter((a) -> a != animal)


talk: ->

for animal in @animals

animal.talk()


# Some tests


console.log("Test1")

kitty = new Cat("Kitty")

pluto = new Dog("Pluto")

kitty.talk()

pluto.talk()


console.log("Test2")

zoo = new Zoo

zoo.add(kitty)

zoo.add(pluto)

zoo.talk()


console.log("Test3")

zoo.remove(pluto)

zoo.talk()

Với chương trình này, ta đã xong thủ tục truyền thống là mỗi khi học ngôn ngữ có tính năng hướng đối tượng thì đều làm thử bài tập 4 OOP.

Chú ý về single quote và double quote

Trong các ngôn ngữ như PHP và Ruby, 2 chuỗi sau khác nhau: "ab\ncd", 'ab\ncd'. Nhưng trong JavaScript và CoffeeScript chúng giống nhau!

Khi viết cho browser side thì chúng ta ít gặp tình huống trên, nhưng khi viết cho server side thì sẽ gặp thường xuyên hơn. Hãy cẩn thận. Để khỏi nhầm lẫn (cho người đọc code chẳng hạn), nên dùng double quote hết cho  xong!

Nguồn bài viết: Dngaz.com

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML