Vinova tuyển lập trình viên Mobile & Web ở Hà Nội, lương $300-1000

Article: 4OOP bằng Scala 1740

JVM
trangia61.myopenid.com 3
Updated about 1 year ago

Ở cấp độ máy ảo, nằm giữa chương trình được dịch sang bytecode và hệ điều hành, có 2 loại đa nhiệm: local concurrency là đa nhiệm trên một máy và distributed concurrency (parallel) là đa nhiệm trên nhiều máy. Loại đầu nổi nhất là JVM, loại sau nổi nhất là Erlang. 2 tiêu chí quan trọng khi đánh giá công cụ giúp lập trình đa nhiệm là độ dễ sử dụng và tốc độ (càng tận dụng được CPU đa lõi tốc độ càng nhanh).

2 ngôn ngữ nổi bật nhất trên JVM để lập trình concurrency là Clojure và Scala. Clojure cú pháp cực đơn giản vì phái sinh từ Lisp, Scala cú pháp phức tạp hơn nhiều vì phái sinh từ cả Java, Ruby, và Erlang. Tuy Scala phức tạp hơn nhưng vì đa số lập trình viên đều bắt đầu sự nghiệp bằng ngôn ngữ họ C nào đó như Pascal, C, C++, C#, Java, PHP nên đối với đa số nó lại dễ học hơn. Hơn nữa sử dụng thư viện Java trong chương trình Scala tự nhiên hơn hẳn so với sử dụng trong chương trình Clojure, nhất là khi Clojure chưa hỗ trợ annotation, nên Scala có động lực học mạnh mẽ hơn Clojure.

Về mặt ngôn ngữ, Scala = Ruby + Java + Erlang. Về mặt tính năng, Scala = OOP + functional + event-driven. Theo truyền thống khi học ngôn ngữ hướng đối tượng, thử giải bài tập 4OOP bằng Scala xem sao. Theo truyền thống khi học ngôn ngữ hướng đối tượng, thử giải bài tập 4OOP bằng Scala xem sao.

Trước tiên hãy tìm động lực học Scala

Để cụ thể, giả sử ta định thuyết phục công ty chuyên làm web cỡ trăm lập trình viên đang sử dụng Perl tìm hiểu Scala.

Perl có nhiều vấn đề, ví dụ:

  • Khó develop
  • Khó maintenance

Công nghệ thay thế cần:

  • Có tốc độ chạy ngang ngửa hoặc hơn Perl, cụ thể tỉ lệ request web trên lượng CPU và RAM bị ăn phải ngang ngửa hoặc hơn Perl
  • Nhiều thư viện
  • Dễ develop, dễ maintenance, dễ áp dụng các chiêu thức software engineering
  • Dễ scale ra vài trăm server

Ruby đạt những tiêu chí trên và rất dễ học với lập trình viên Perl, nhưng Scala cú pháp giống Ruby. Erlang dễ scale vì tính năng lập trình mạng rất tốt, nhưng ít thư viện hơn Scala. Scala tốc độ hơn Erlang, Ruby, và Perl, tỉ lệ request web trên lượng CPU và RAM bị ăn rất tốt (ví dụ với 1 request thì Perl tốn ít tài nguyên hơn Scala, nhưng với 1000 request thì Scala tốn ít hơn).

JVM có Clojure và Scala, xét yếu tố nhiều thư viện và dễ develop:

  • Phải dễ gọi thư viện Java. Java thư viện vô số kể, gì cũng có, nhưng khó gọi thì cũng phí cơm. Tất nhiên không dùng chính ngôn ngữ Java rồi để gọi thư viện Java rồi. Java khó develop vì khả năng diễn đạt kém, học Ruby rồi thì thấy khả năng diễn đạt của Java kém thế nào. <-- Scala thắng Clojure
  • Phải dễ học cho người bình thường. Dễ học đối với ai đó nhưng cả trăm người học không trôi thì cũng phí cơm. Xem video tổng giám đốc FPT nói về công nghiệp phần mềm sẽ thấy. <-- Scala thắng Clojure

Nét tương đồng giữa Scala và Java, Ruby, và Erlang:

  • Scala có tính năng hướng đối tượng giống Java và Ruby. Do tương đồng về cú pháp nên có thể viết chương trình Scala để tương tác với thư viện Java rất thoải mái. Điểm thu hút lập trình viên đến với máy ảo Java chính là việc có thể dùng ké vô số thư viện Java sẵn có.
  • Scala giống Ruby ở chỗ cú pháp rất uyển chuyển, mọi thứ đều là object kể cả hàm. Người ta hay nói viết chương trình bằng Scala dễ hơn viết bằng Java, dễ ở đây không nói về cú pháp vì cú pháp Scala phức tạp hơn Java, mà nói về sự uyển chuyển, khả năng diễn đạt ngắn gọn, dễ viết dễ hiểu. Scala là static typed, nên phù hợp để làm project đông người hơn. Nếu bạn rất thích Ruby, thì không nên dùng JRuby mà nên dùng Scala{#emotions_dlg.laughing}
  • Scala giống Erlang ở chỗ có actor và pattern matching. Ai đã dùng qua tính năng pattern matching rồi thì chắc chắn không muốn dùng ngôn ngữ không có tính năng này nữa.

Scala kết hợp được cái hay của cả 3, có thể nói sức mạnh Scala = thư viện của Java + OOP và tính uyển chuyển của Ruby + actor và pattern matching của Erlang. Tham khảo nhận xét sau 3 năm sử dụng Scala của tác giả Lift, web framework đang rất nổi.

Tóm lại, tổng hợp nhiều yếu tố thì Scala rất đáng học.

Chương trình 4OOP bằng Scala

Cách dễ nhất được nhiều người ưa thích để cài Scala và chạy chương trình viết bằng Scala là thông qua Maven:

  1. Gõ lệnh mvn archetype:generate
  2. Chọn archetype scala-archetype-simple rồi theo wizard để làm tiếp
  3. Đọc thêm hướng dẫn ở maven-scala-plugin
# animal.scala

package animal
abstract class Animal(val name: String) {
def talk = println("I am an animal")
}

class Cat(name: String) extends Animal(name) {
override def talk = println("Meow, my name is " + name)
}

class Dog(name: String) extends Animal(name) {
override def talk = println("Wolf, my name is " + name)
}

class Zoo {
var animals = new Array[Animal](0)

def add(animal: Animal) = { animals = animals ++ Array(animal) }

def talk = animals.foreach { a => a.talk }
}
# test_animal.scala

import animal._

val c = new Cat("Kitty")
val d = new Dog("Pluto")
val z = new Zoo
z.add(c)
z.add(d)
z.talk

Đối với bài này, 4 tính năng của OOP thể hiện ở 4 keyword là: class, package, extends và override.

Đọc thêm

1 2 

Editors
ngocdaothanh.myopenid.com 172
trangia61.myopenid.com 3

Comments

rollingstone.myopenid.com 1
over 2 years ago

Đại ca có nhận xét gì về triển vọng của Lift trong những năm tới không? Scala đúng là rất thú vị, uyển chuyển như Ruby, dễ tiếp thu hơn nhiều so với Erlang (cảm giác hơi cứng và khuôn mẫu quá).

ngocdaothanh.myopenid.com 172
Updated over 2 years ago

Hiện cái gì cũng lên web, nên nói chung ngôn ngữ nào muốn nổi thì điều kiện sống còn là phải có web framework tốt. Cái này nói lên nhiều điều: ngôn ngữ uyển chuyển dễ xài, nhiều thư viện, tốc độ v.v.

Lift hiện có khoảng 30 commiter. Bạn watch repository sẽ thấy ngày nào cũng có cả chục commit, tốc độ phát triển rất nhanh. Rails có DHH thì Lift có DPP, join mailing list sẽ thấy nhạc trưởng DPP chỉ huy mấy năm nay rất khéo. Tóm lại ngay hiện tại Lift đã rất thành công, không thua kém Rails, thậm chí có mặt vượt trội. Sau Scala 2.8 (hỗ trợ annotation lồng vào nhau, cải tiến actor v.v.) Lift sẽ còn tiến xa.

Erlang chính ra dễ tiếp thu nhất vì cú pháp thoáng dễ đọc lại siêu đơn giản, học vài tiếng là hết. Bạn học xong cú pháp Scala sẽ thấy búng ngón tay là học xong cú pháp Erlang. Cứng và khuân mẫu đáng ra phải dành cho Scala vì nó là static typed, static có thể không cứng và khuôn mẫu quá, nhưng không thể uyển chuyển hơn dynamic.

You must login to be able to comment

Uploaded files

No file uploaded yet

You must login to be able to upload

Nhà tài trợ:

Mọi người đều tự do viết bài, sửa bài của người khác, và bình luận ở trang web này. Bạn muốn chủ động tạo bài mới để chia sẻ kinh nghiệm với mọi người? Xin click link ở dưới.

Create new content