Scala Là Gì? Tổng Quan Về Ngôn Ngữ Lập Trình Scala

Scala đang ngày càng trở nên phổ biến trong giới lập trình viên. Vậy Scala là gì và tại sao nó lại được ưa chuộng đến vậy? Bài viết này sẽ cung cấp cho bạn cái nhìn tổng quan về ngôn ngữ lập trình Scala, từ định nghĩa, lý do nên chọn Scala, cách cài đặt cho đến các khái niệm cơ bản.

Scala là một ngôn ngữ lập trình đa năng, kết hợp giữa tính linh hoạt (Scalable)ngôn ngữ (Language). Nó hỗ trợ cả hai paradigm lập trình: lập trình hàm (functional programming) và lập trình hướng đối tượng (object-oriented programming). Scala được phát triển bởi Martin Odersky tại École Polytechnique Fédérale de Lausanne (EPFL) từ năm 2001. Đến cuối năm 2003, Scala chính thức được phát hành trên nền tảng Java và hỗ trợ .NET framework vào tháng 6 năm 2004 (tuy nhiên, hỗ trợ cho .NET đã ngừng từ năm 2012). Phiên bản hiện tại của Scala là 2.11.8.

Tại Sao Nên Lựa Chọn Scala?

Có nhiều lý do để các nhà phát triển lựa chọn Scala:

  • Kết hợp ưu điểm của nhiều paradigm: Scala kết hợp lập trình hàm và lập trình hướng đối tượng, cho phép bạn viết mã theo phong cách phù hợp nhất với từng vấn đề.
  • Cú pháp ngắn gọn và rõ ràng: Scala có cú pháp súc tích, giúp giảm thiểu lượng mã cần viết và tăng khả năng đọc hiểu.
  • Tương thích với Java: Scala chạy trên máy ảo Java (JVM) và có thể tương tác liền mạch với mã Java, cho phép bạn tận dụng các thư viện và framework Java hiện có.
  • Hệ thống kiểu tĩnh mạnh mẽ: Scala sử dụng kiểu tĩnh, giúp phát hiện lỗi trong quá trình biên dịch và cải thiện độ tin cậy của mã.
  • Tính biểu cảm cao: Scala cung cấp nhiều tính năng mạnh mẽ như pattern matching, type inference và closures, giúp bạn viết mã một cách biểu cảm và hiệu quả.

Cài Đặt Scala

Để cài đặt Scala, bạn cần cài đặt Java trước.

Cài đặt Java

Trong ví dụ này, chúng ta sẽ sử dụng Java 8. Thực hiện các lệnh sau trên Ubuntu 16.04:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

Sau khi cài đặt, kiểm tra phiên bản Java bằng lệnh:

java -version

Kết quả hiển thị phiên bản Java đã cài đặt, ví dụ:

java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)

Cài đặt Scala

  1. Tải phiên bản mới nhất của Scala từ trang chủ: Scala downloads.
  2. Giải nén và sao chép vào thư mục /opt.
  3. Mở file /etc/environment và thêm đường dẫn đến thư mục bin của Scala vào cuối biến PATH. Ví dụ:
/opt/scala-2.11.8/bin
  1. Thực thi lệnh sau để cập nhật môi trường:
source /etc/environment
  1. Kiểm tra cài đặt bằng cách gõ lệnh scala trong terminal. Nếu cài đặt thành công, bạn sẽ thấy màn hình chào mừng của Scala:
Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_101).
Type in expressions for evaluation. Or try :help.

scala>
  1. Thử in dòng chữ “Hello world!” để đảm bảo mọi thứ hoạt động:
scala> println("Hello world!")
Hello world!

Màn hình dòng lệnh Scala sau khi cài đặt thành công, in dòng chữ Hello world!Màn hình dòng lệnh Scala sau khi cài đặt thành công, in dòng chữ Hello world!

Khai Báo Biến Trong Scala

Scala hỗ trợ ba cách khai báo biến: val, varlazy val.

  • var: Biến được khai báo bằng var có thể thay đổi giá trị sau khi khởi tạo.
scala> var x = 100
x: Int = 100

scala> x = 10
x: Int = 10
  • val: Biến được khai báo bằng val là bất biến (immutable), nghĩa là giá trị của nó không thể thay đổi sau khi khởi tạo. Cố gắng thay đổi giá trị của một val sẽ gây ra lỗi biên dịch.
scala> val x = 100
x: Int = 100

scala> x = 10
<console>:12: error: reassignment to val
       x = 10
       ^
  • lazy val: Biến được khai báo bằng lazy val chỉ được khởi tạo khi nó được truy cập lần đầu tiên. Điều này hữu ích cho việc trì hoãn việc tính toán các giá trị tốn kém cho đến khi thực sự cần thiết.
scala> lazy val x = 100
x: Int = <lazy>

scala> x
res0: Int = 100

Các Kiểu Giá Trị Trong Scala

Scala có một hệ thống kiểu giá trị phong phú, bao gồm các kiểu nguyên thủy, kiểu tham chiếu và các kiểu đặc biệt.

Cây Phân Cấp Kiểu Giá Trị

Màn hình dòng lệnh Scala sau khi cài đặt thành công, in dòng chữ Hello world!Màn hình dòng lệnh Scala sau khi cài đặt thành công, in dòng chữ Hello world!

  • Any: Là lớp gốc của tất cả các kiểu giá trị trong Scala. Tất cả các lớp đều kế thừa trực tiếp hoặc gián tiếp từ Any.
  • AnyVal: Là lớp cha của các kiểu giá trị nguyên thủy như Int, Double, Boolean, v.v.
  • AnyRef: Là lớp cha của tất cả các kiểu tham chiếu, bao gồm cả String và các lớp do người dùng định nghĩa.

Các Kiểu Số

  • Byte: Số nguyên 8-bit, từ -128 đến 127.
  • Short: Số nguyên 16-bit, từ -32768 đến 32767.
  • Int: Số nguyên 32-bit, từ -2147483648 đến 2147483647.
  • Long: Số nguyên 64-bit, từ -9223372036854775808 đến 9223372036854775807.
  • Float: Số thực dấu chấm động 32-bit (độ chính xác đơn).
  • Double: Số thực dấu chấm động 64-bit (độ chính xác kép).

Các Kiểu Khác

  • Boolean: Giá trị logic, có thể là true hoặc false.
  • Char: Ký tự Unicode 16-bit không dấu, từ U+0000 đến U+FFFF.
  • Unit: Tương tự như void trong Java, được sử dụng để chỉ định rằng một hàm không trả về giá trị.
  • Null: Kiểu nằm dưới cùng của tất cả các kiểu tham chiếu. Scala không sử dụng từ khóa null mà sử dụng kiểu Null.
  • Nothing: Kiểu nằm dưới cùng của tất cả các kiểu giá trị.
  • String: Kiểu chuỗi ký tự.

Hàm (Function)

Trong Scala, có sự phân biệt giữa hàm (function) và phương thức (method). Phương thức là một phần của lớp (class) và có tên và chữ ký. Hàm là một đối tượng và có thể được gán cho một biến.

Array, List, Range và Tuple

Scala cung cấp các cấu trúc dữ liệu mạnh mẽ để làm việc với tập hợp dữ liệu.

  • Array: Một mảng chứa một tập các giá trị cùng kiểu. Các giá trị và khóa có thể thay đổi.

  • List: Tương tự như mảng, nhưng các phần tử của List là bất biến (immutable).

  • Range: Một chuỗi các số nguyên có thứ tự. Có nhiều cách để tạo một Range:

scala> 1 to 5
res0: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5)

scala> 1 until 5
res1: scala.collection.immutable.Range = Range(1, 2, 3, 4)

scala> 1 to 20 by 4
res2: scala.collection.immutable.Range = Range(1, 5, 9, 13, 17)
  • Tuple: Một cấu trúc chứa một chuỗi các giá trị, có thể có kiểu khác nhau. Tuple rất hữu ích để nhóm các dữ liệu rời rạc hoặc xây dựng cấu trúc dữ liệu phức tạp.
scala> val tuple = (1, 2, "Scala")
tuple: (Int, Int, String) = (1,2,Scala)

scala> val tuple2 = 1 -> "Scala"
tuple2: (Int, String) = (1,Scala)

scala> val element2 = tuple2._2
element2: String = Scala

Kết Luận

Bài viết này đã cung cấp một cái nhìn tổng quan về ngôn ngữ lập trình Scala, bao gồm định nghĩa, lý do lựa chọn, cách cài đặt và các khái niệm cơ bản. Hy vọng rằng bạn đã có được những kiến thức cần thiết để bắt đầu khám phá thế giới của Scala. Trong bài viết tiếp theo, chúng ta sẽ tìm hiểu về lập trình hướng đối tượng trong Scala.