Bắt đầu với Scala: những kiến thức cơ bản (Scala phần 1)

Tất cả các ví dụ mình thực hiện trên hệ điều hành ubuntu 16.04.

Scala là gì?

  • Scala là sự kết hợp của Scalable và Language. Nó được ví như một ngôn ngữ lập trình vạn năng, Scala hỗ trợ cả lập trình hàm và lập trình hướng đối tượng.
  • Scala được manh nha phát triển từ năm 2001 bởi Martin Odersky tại École Polytechnique Fédérale de Lausanne (Trường đại học kỹ thuật Lausanne - Thụy Sĩ). Đến cuối năm 2003, Scala chính thức được phát hành trên nền tảng Java, và trên .NET framework vào tháng 6 năm 2004, tuy nhiên Scala đã ngừng hỗ trợ .NET framework từ năm 2012. Đến thời điểm hiện tại Scala đang ở version 2.11.8.

Tại sao lựa chọn Scala?

  • Scala là sử dụng biến kiểu tĩnh, lập trình hàm và hướng đối tượng, cú pháp ngắn gọn và linh hoạt...
  • Cú pháp ngắn gọn, sáng sủa.
  • Lập trình hướng đối tượng
  • Lập trình hàm.
  • Có thế kết hợp với Java.
  • Chạy trên máy ảo JVM.

Cài đặt Java: để cài đặt được Scala, trước tiên chúng ta cần cài đặt Java.

  • Mình lựa chọn java 8, lần lượt thực hiện các lệnh sau
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
  • Cài đặt xong gõ lệnh java -version để kiểm tra phiên bản java được cài đặt.
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:

  • Các bạn tải phiên bản mới nhất của Scala: Scala latest version
  • Sau khi download, giải nén và copy vào folder opt, mở file /etc/environment thêm vào cuối PATH đường dấn đến thư mục bin. Ví dụ
/opt/scala-2.11.8/bin
  • Gõ lệnh phía dưới
source /etc/enviroment
  • Giờ hãy thử gõ scala, màn hình terminal sẽ như phía dưới
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>
  • Gõ thử lệnh phía dưới và nhấn enter, dòng chữ quen thuộc mà lập trình viên nào cũng đã từng thấy hiện ra. Tiếp theo chúng ta cùng tìm hiểu về các cách khai báo biến và các kiểu giá trị của Scala nhé.
scala> println("Hello world!");
Hello world!

Khai báo biến: Scala hỗ trợ 3 cách khai báo biến: val, var, lazy val.

  • var: khi một biến được khai báo bằng từ khóa val, giá trị của biến có thể thay đổi được.
scala> var x=100
x: Int = 100
scala> x=10
x: Int = 10
scala>
  • val: khi một biến được khai báo, giá trị của nó sẽ không thể thay đổi. Cố gắng thay đổi giá trị, chúng ta sẽ nhận được lỗi từ trình biên dịch.
scala> val x=100
x: Int = 100
scala> x=10
<console>:12: error: reassignment to val
       x=10
        ^
scala>
  • lazy val: biến sẽ được gán giá trị ở lần gọi đầu tiên.
scala> lazy val x = 100
x: Int = <lazy>
scala>

Kiểu giá trị của Scala:

hierarchy.jpg

Any, AnyVal, AnyRefs:

  • Lớp Any là gốc của cây phân cấp kiểu giá trị và nó là một abstract class. Tất cả các class đều kế thừa trực tiếp hoặc gián tiếp class này.

Kiểu số:

  • Byte: số nguyên, từ -128 đến 127.
  • Short: số nguyên, từ -32768 đến 32767.
  • Int: số nguyên, từ −2147483648 đến 2147483647.
  • Long: số nguyên, từ −9223372036854775808 đến 9223372036854775807.
  • Float: số thực, chấm động nhị phân độ chính xác đơn kích thước 32 bit.
  • Double: số thực, chấm động nhị phân độ chính xác kép kích thước 64 bit.
  • Boolean: true, false.
  • Char: 16 bit ký tự Unicode không dấu. Độ rộng từ U+0000 đến U+FFFF.
  • Unit: Sử dụng để định nghĩa function không trả lại giá trị. giống như từ khóa void trong Java.
  • Null: nằm phía dưới cùng của tất cả reference types (kiểu tham chiếu), Scala không hỗ trợ từ khóa null mà thay vào đó sử dụng biến kiểu Null.
  • Nothing: nắm phía dưới cùng của tất cả các kiểu giá trị. Chi tiết chúng ta sẽ tìm hiểu sau.
  • Strings: kiểu chuỗi.

Hàm (function):

  • Scala có cả hàm và phương thức. Phương thức là một phần của class, có tên và chữ ký. Hàm là một đối tượng và có thể gán vào biến.

Array, List, Range, and Tuple:

  • Array: một kiểu cấu trúc dữ liệu chứa một tập các giá trị cùng kiểu, mỗi giá trị đi kèm với một khóa chỉ định (thường là số nguyên). Mảng có cấu trúc kiểu key => value. Các giá trị và khóa đi cùng có thể thay đổi.
  • List: Cũng giống như mảng, có điều giá trị các phần tử của List không thể thay đổi được.
  • Range: Một sắp xếp có thứ tự các giá trị kiểu số nguyên, có nhiều cách để tạo 1 range, ví dụ:
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 có tuần tự gồm 2 hoặc nhiều giá trị cùng hoặc khác kiểu. Rất có ích để gom nhóm các kiểu dữ liệu rời rạc hoặc xây dựng một cấu trúc dữ liệu. Có 2 cách khai báo tuple, khai báo và truy cập giá trị của phần tử trong tuple các bạn tham khảo ví dụ phía dưới
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

Vậy là chúng ta đã tìm hiểu xong cơ bản về Scala, bài tiếp chúng ta sẽ tìm hiểu về lập trình hướng đối tượng trong Scala nhé.