Scala (ngôn ngữ lập trình)

**Scala** ( ) là một ngôn ngữ lập trình đa mẫu hình, được thiết kế để tích hợp các tính năng của lập trình hướng đối tượng với lập trình hàm. Tên Scala xuất phát từ chữ tiếng Anh **', có nghĩa là"''ngôn ngữ có khả năng mở rộng''", được phát triển dựa trên nhu cầu sử dụng các tính năng mở rộng của nó.

==Nền tảng và giấy phép==
Scala chạy trên nền [[máy ảo]] Java và tương thích với chương trình Java. Nó cũng có thể chạy trên [[Android (hệ điều hành)|Android]]. Nó cũng có thể chạy trên [[.NET Framework|nền tảng.NET]], nhưng chưa ổn định.

Scala có kiểu biên dịch giống như Java và [[C thăng|C#]], nên Scala code có thể đọc được thư viện Java (hoặc thư viện.NET).

Scala đặt dưới [[giấy phép BSD]].

==Lịch sử phát triển==
Scala bắt đầu được thiết kế từ năm 2001 tại [[École Polytechnique Fédérale de Lausanne]] (EPFL) bởi [[Martin Odersky]], tiếp tục phát triển khi làm việc tại Funnel, một ngôn ngữ lập trình tích hợp các ý tưởng về lập trình hàm và [[mạng Petri]]. Sau đó, Odersky làm việc với [[Generic Java (programming language)|Generic Java]] và [[javac]], [[trình biên dịch]] Sun's Java. Scala được cho ra những phiên bản đầu vào cuối năm 2003 / đằu 2004  trên nền Java, và nền.NET vào tháng 6 năm 2004. Phiên bản 2.0 ra mắt tháng 3 năm 2006.

==Tính năng của lập trình Hướng đối tượng==
Scala là ngôn ngữ thuần lập trình hướng đối tượng trong cú pháp theo quy tắc tất cả giá trị biến đều là một đối tượng. Kiểu dữ liệu và hành vi của một đối tượng được mô tả bằng các lớp. Các lớp trừu tượng được mở rộng bằng các lớp con và hạn chế các khó khăn trong đa kế thừa.

==Lập trình hàm==
Scala hỗ trợ lập trình hàm. Nó hỗ trợ cú pháp ngắn gọn cho việc định nghĩa các hàm, cho phép hàm lồng vào nhau. Dùng từ khóa <kbd>**lazy**</kbd> để trì hoãn sử dụng một biến cho đến khi cần sử dụng nó.
Scala hỗ trợ các kiểu dữ liệu đại số của lập trình hàm.

[[Thuật toán sắp xếp]] theo kiểu lập trình hàm:

<syntaxhighlight lang="scala">
def qsort: List[Int] => List[Int] = {
  case Nil => Nil
  case pivot:: tail =>
    val (smaller, rest) = tail.partition(_ < pivot)
    qsort(smaller)::: pivot:: qsort(rest)
}
</syntaxhighlight>

==Khả năng Mở rộng==
Trong thực tế, các ứng dụng luôn phải thay đổi để đáp ứng các yêu cầu cụ thể, Scala được thiết kế để phục vụ mục đích đó. Scala cung cấp một dạng [[ngôn ngữ máy]] độc đáo giúp hỗ trợ lập trình dựa tên các thư viện hàm có sẵn:

* mọi phương thức (hàm) đều có thể dùng như là một toán tử
* đánh dấu kết thúc cú pháp tự động.

==Phần mềm sử dụng Scala==
Lift là một nền Web miễn phí dựa trên Scala, được xây dựng với mục đích cung cấp các tính năng mà [[Ruby on Rails]] có, đồng thời khắc phục các nhược điểm mà Ruby on Rails gặp phải. Tất cả thư viện hàm của Java và lập trình Web đầu có thể chạy trên nền Lift.

Tháng 4 năm 2009 [[Twitter]] thông báo đã chuyển đa số phần code bên trong từ [[Ruby (ngôn ngữ lập trình)|Ruby]] sang Scala và sẽ chuyển đổi toàn bộ. Thêm vào đó [[Foursquare]] sử dụng Scala và Lift.

==Ví dụ kinh điển"Hello world"==
Đây là [[Hello world|chương trình Hello world]] viết bằng Scala:
 
 > object HelloWorld extends Application {
 > println("Hello, world!")
 > }
 
hoặc

 > object HelloWorld {
 > def main(args: Array[String]) {
 > println("Hello, world!")
 > }
 > }

Chương trình lưu dưới dạng HelloWorld.scala, biên dịch bằng cú pháp:

 > scalac HelloWorld.scala

Chạy chương trình:

 > scala -classpath. HelloWorld

Hoặc chạy trực tiếp từ mã:

 > scala HelloWorld.scala

==Kiểm thử==
Có nhiều cách kiểm tra chương trình viết bằng Scala:
* [http://www.scalatest.org/ ScalaTest]
* [http://code.google.com/p/scalacheck/ ScalaCheck], một thư viện tương tự như [[QuickCheck]] của Haskell
* [http://code.google.com/p/specs/ specs], một thư viện [[phát triển theo định hướng hành vi]] cho Scala
* [[JUnit]]

Thư viện **SUnit''' bị gở bỏ từ phiên bản 2.8.0.

## Tham khảo

## Đọc thêm

* 
* 
* 
* 
* 
* 
* 
* 
* 
*

## Liên kết ngoài
*Scala website
*Simply Scala, phiên bản trực tuyến của Scala REPL - cho phép bạn thử Scala bằng một trình duyệt web
*Scala Wiki 
*Literate Programs - Scala 
*The Scala Search Engine 
*Lift Web Framework
*O/R Broker 
*Podcast Interview with Martin Odersky on Scala
*Scala Presentation From The Googleplex  (video) - bởi Martin Odersky, người tạo nên ngôn ngữ; accompanying slides from the talk
*Scalaz
*Scala community blogs
*Lift  Slides from Pollak's lift video, contains a presentation of Scala
*Scala articles directory 
*Scala for Java Refugees 
*Scala Forum