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) và 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.
Mục Lục
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
- Tải phiên bản mới nhất của Scala từ trang chủ: Scala downloads.
- Giải nén và sao chép vào thư mục
/opt. - Mở file
/etc/environmentvà thêm đường dẫn đến thư mụcbincủa Scala vào cuối biếnPATH. Ví dụ:
/opt/scala-2.11.8/bin
- Thực thi lệnh sau để cập nhật môi trường:
source /etc/environment
- Kiểm tra cài đặt bằng cách gõ lệnh
scalatrong 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>
- 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!
Khai Báo Biến Trong Scala
Scala hỗ trợ ba cách khai báo biến: val, var và lazy val.
var: Biến được khai báo bằngvarcó 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ằngvallà 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ộtvalsẽ 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ằnglazy valchỉ đượ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!
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ảStringvà 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àtruehoặcfalse.Char: Ký tự Unicode 16-bit không dấu, từU+0000đếnU+FFFF.Unit: Tương tự nhưvoidtrong 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óanullmà sử dụng kiểuNull.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ủaListlà 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ộtRange:
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.Tuplerấ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.
