Scala - Cú pháp cơ bản
Nếu bạn hiểu rõ về Java thì bạn sẽ rất dễ dàng học Scala. Sự khác biệt lớn nhất về cú pháp giữa Scala và Java là dấu ';' ký tự cuối dòng là tùy chọn.
Khi chúng ta xem xét một chương trình Scala, nó có thể được định nghĩa là một tập hợp các đối tượng giao tiếp thông qua việc gọi các phương thức của nhau. Bây giờ chúng ta hãy xem xét ngắn gọn ý nghĩa của lớp, đối tượng, phương thức và các biến cá thể.
Object- Đối tượng có trạng thái và hành vi. Một đối tượng là một thể hiện của một lớp. Ví dụ - Một con chó có các trạng thái - màu sắc, tên, giống cũng như các hành vi - vẫy tay, sủa và ăn.
Class - Một lớp có thể được định nghĩa như một khuôn mẫu / bản thiết kế mô tả các hành vi / trạng thái có liên quan đến lớp.
Methods- Một phương pháp về cơ bản là một hành vi. Một lớp có thể chứa nhiều phương thức. Nó nằm trong các phương thức nơi logic được viết, dữ liệu được thao tác và tất cả các hành động được thực thi.
Fields- Mỗi đối tượng có một tập hợp các biến thể hiện duy nhất của nó, chúng được gọi là các trường. Trạng thái của một đối tượng được tạo bởi các giá trị được gán cho các trường này.
Closure - A closure là một hàm, có giá trị trả về phụ thuộc vào giá trị của một hoặc nhiều biến được khai báo bên ngoài hàm này.
Traits- Một đặc điểm đóng gói các định nghĩa phương thức và trường, sau đó có thể được sử dụng lại bằng cách trộn chúng vào các lớp. Các đặc điểm được sử dụng để xác định các loại đối tượng bằng cách chỉ định chữ ký của các phương thức được hỗ trợ.
Chương trình Scala đầu tiên
Chúng ta có thể thực thi chương trình Scala ở hai chế độ: một là interactive mode và cái khác là script mode.
Chế độ tương tác
Mở dấu nhắc lệnh và sử dụng lệnh sau để mở Scala.
\>scala
Nếu Scala được cài đặt trong hệ thống của bạn, kết quả sau sẽ được hiển thị:
Welcome to Scala version 2.9.0.1
Type in expressions to have them evaluated.
Type :help for more information.
Nhập văn bản sau vào bên phải lời nhắc Scala và nhấn phím Enter -
scala> println("Hello, Scala!");
Nó sẽ tạo ra kết quả sau:
Hello, Scala!
Chế độ tập lệnh
Sử dụng các hướng dẫn sau để viết một chương trình Scala ở chế độ tập lệnh. Mở notepad và thêm mã sau vào đó.
Thí dụ
object HelloWorld {
/* This is my first java program.
* This will print 'Hello World' as the output
*/
def main(args: Array[String]) {
println("Hello, world!") // prints Hello World
}
}
Lưu tệp dưới dạng - HelloWorld.scala.
Mở cửa sổ nhắc lệnh và chuyển đến thư mục lưu tệp chương trình. Các 'scalacLệnh 'được sử dụng để biên dịch chương trình Scala và nó sẽ tạo ra một vài tệp lớp trong thư mục hiện tại. Một trong số họ sẽ được gọi làHelloWorld.class. Đây là một mã bytecode sẽ chạy trên Máy ảo Java (JVM) bằng cách sử dụng 'scala' chỉ huy.
Sử dụng lệnh sau để biên dịch và thực thi chương trình Scala của bạn.
\> scalac HelloWorld.scala
\> scala HelloWorld
Đầu ra
Hello, World!
Cú pháp cơ bản
Sau đây là các cú pháp và quy ước mã hóa cơ bản trong lập trình Scala.
Case Sensitivity - Scala phân biệt chữ hoa chữ thường, có nghĩa là định danh Hello và hello sẽ có nghĩa khác trong Scala.
Class Names- Đối với tất cả các tên lớp, chữ cái đầu tiên phải là chữ hoa. Nếu một số từ được sử dụng để tạo thành tên của lớp, thì mỗi chữ cái đầu tiên của từ bên trong phải ở dạng Chữ hoa.
Example - lớp MyFirstScalaClass.
Method Names- Tất cả các tên phương thức phải bắt đầu bằng chữ thường. Nếu nhiều từ được sử dụng để tạo thành tên của phương thức, thì chữ cái đầu tiên của mỗi từ bên trong phải ở dạng Chữ hoa.
Example - def myMethodName ()
Program File Name- Tên tệp chương trình phải khớp chính xác với tên đối tượng. Khi lưu tệp, bạn nên lưu bằng tên đối tượng (Hãy nhớ Scala phân biệt chữ hoa chữ thường) và nối thêm '.scala'đến cuối tên. (Nếu tên tệp và tên đối tượng không khớp chương trình của bạn sẽ không biên dịch).
Example- Giả sử 'HelloWorld' là tên đối tượng. Sau đó, tệp sẽ được lưu dưới dạng 'HelloWorld.scala'.
def main(args: Array[String]) - Xử lý chương trình Scala bắt đầu từ phương thức main () là một phần bắt buộc của mọi Chương trình Scala.
Số nhận dạng Scala
Tất cả các thành phần Scala yêu cầu tên. Tên được sử dụng cho các đối tượng, lớp, biến và phương thức được gọi là định danh. Không thể sử dụng từ khóa làm số nhận dạng và số nhận dạng có phân biệt chữ hoa chữ thường. Scala hỗ trợ bốn loại định danh.
Định danh chữ và số
Định danh chữ và số bắt đầu bằng một chữ cái hoặc một dấu gạch dưới, có thể được theo sau bởi các chữ cái, chữ số hoặc dấu gạch dưới. Ký tự '$' là một từ khóa dành riêng trong Scala và không được sử dụng trong số nhận dạng.
Sau đây là legal alphanumeric identifiers -
age, salary, _value, __1_value
Sau đây là illegal identifiers -
$salary, 123abc, -salary
Số nhận dạng nhà điều hành
Định danh toán tử bao gồm một hoặc nhiều ký tự toán tử. Các ký tự toán tử là các ký tự ASCII có thể in được như +,:,?, ~ Hoặc #.
Sau đây là số nhận dạng nhà điều hành hợp pháp -
+ ++ ::: <?> :>
Trình biên dịch Scala sẽ nội bộ mã định danh toán tử "mangle" để biến chúng thành mã định danh Java hợp pháp với các ký tự $ được nhúng. Ví dụ: số nhận dạng: -> sẽ được trình bày nội bộ dưới dạng $ dấu hai chấm $ trừ đi $ lớn hơn.
Số nhận dạng hỗn hợp
Mã định danh hỗn hợp bao gồm một mã định danh chữ và số, theo sau là dấu gạch dưới và mã định danh toán tử.
Sau đây là các số nhận dạng hỗn hợp hợp pháp -
unary_+, myvar_=
Ở đây, unary_ + được sử dụng làm tên phương thức xác định toán tử một ngôi + và myvar_ = được sử dụng làm tên phương thức xác định toán tử gán (nạp chồng toán tử).
Số nhận dạng theo nghĩa đen
Định danh theo nghĩa đen là một chuỗi tùy ý được bao trong dấu tích phía sau (`... ').
Sau đây là các từ định danh hợp pháp theo nghĩa đen -
`x` `<clinit>` `yield`
Từ khóa Scala
Danh sách sau đây hiển thị các từ dành riêng trong Scala. Những từ dành riêng này không được dùng làm hằng số hoặc biến hoặc bất kỳ tên định danh nào khác.
trừu tượng | trường hợp | nắm lấy | lớp học |
phản đối | làm | khác | kéo dài |
sai | sau cùng | cuối cùng | cho |
forSome | nếu | ngầm hiểu | nhập khẩu |
lười biếng | trận đấu | Mới | Vô giá trị |
vật | ghi đè | gói hàng | riêng tư |
được bảo vệ | trở về | niêm phong | siêu |
điều này | phi | đặc điểm | Thử |
thật | kiểu | val | Var |
trong khi | với | năng suất | |
- | : | = | => |
<- | <: | <% | >: |
# | @ |
Nhận xét trong Scala
Scala hỗ trợ các chú thích một dòng và nhiều dòng rất giống với Java. Các nhận xét nhiều dòng có thể được lồng vào nhau, nhưng bắt buộc phải được lồng đúng cách. Tất cả các ký tự có sẵn bên trong bất kỳ bình luận nào đều bị trình biên dịch Scala bỏ qua.
object HelloWorld {
/* This is my first java program.
* This will print 'Hello World' as the output
* This is an example of multi-line comments.
*/
def main(args: Array[String]) {
// Prints Hello World
// This is also an example of single line comment.
println("Hello, world!")
}
}
Dòng trống và Khoảng trắng
Một dòng chỉ chứa khoảng trắng, có thể kèm theo chú thích, được gọi là dòng trống và Scala hoàn toàn bỏ qua nó. Các mã thông báo có thể được phân tách bằng ký tự khoảng trắng và / hoặc nhận xét.
Nhân vật dòng mới
Scala là một ngôn ngữ hướng dòng trong đó các câu lệnh có thể được kết thúc bằng dấu chấm phẩy (;) hoặc dòng mới. Dấu chấm phẩy ở cuối câu lệnh thường là tùy chọn. Bạn có thể nhập một câu lệnh nếu muốn nhưng không cần thiết nếu câu lệnh xuất hiện một mình trên một dòng. Mặt khác, cần có dấu chấm phẩy nếu bạn viết nhiều câu lệnh trên một dòng. Cú pháp dưới đây là cách sử dụng nhiều câu lệnh.
val s = "hello"; println(s)
Gói Scala
Một gói là một mô-đun mã được đặt tên. Ví dụ, gói tiện ích Lift là net.liftweb.util. Khai báo gói là dòng không phải chú thích đầu tiên trong tệp nguồn như sau:
package com.liftcode.stuff
Các gói Scala có thể được nhập để chúng có thể được tham chiếu trong phạm vi biên dịch hiện tại. Câu lệnh sau nhập nội dung của gói scala.xml:
import scala.xml._
Bạn có thể nhập một lớp và đối tượng, chẳng hạn như HashMap từ gói scala.collection.mutable -
import scala.collection.mutable.HashMap
Bạn có thể nhập nhiều lớp hoặc đối tượng từ một gói, ví dụ: TreeMap và TreeSet từ gói scala.collection.immutable -
import scala.collection.immutable.{TreeMap, TreeSet}
Áp dụng động
Một đặc điểm đánh dấu cho phép gọi động. Các trường hợp x của đặc điểm này cho phép gọi phương thức x.meth (args) cho tên phương thức tùy ý meth và đối số liệt kê args cũng như truy cập trường x.field cho trường tên trường tùy ý. Tính năng này được giới thiệu trong Scala-2.10.
Nếu một lệnh gọi không được hỗ trợ bởi x (tức là nếu kiểm tra kiểu không thành công), nó sẽ được viết lại theo các quy tắc sau:
foo.method("blah") ~~> foo.applyDynamic("method")("blah")
foo.method(x = "blah") ~~> foo.applyDynamicNamed("method")(("x", "blah"))
foo.method(x = 1, 2) ~~> foo.applyDynamicNamed("method")(("x", 1), ("", 2))
foo.field ~~> foo.selectDynamic("field")
foo.varia = 10 ~~> foo.updateDynamic("varia")(10)
foo.arr(10) = 13 ~~> foo.selectDynamic("arr").update(10, 13)
foo.arr(10) ~~> foo.applyDynamic("arr")(10)