Trong Scala, có kiểu Option[T]
có 2 giá trị là Some[T](value)
và None
. Class Optional có method map
.
map
nhận tham số là 1 function.
Đoạn code đầu là lambda expression, 1 dạng khác của function. Hai cách viết dưới đây đều như nhau. Tuy nhiên viết theo dạng _
ngắn hơn, dễ đọc hơn.
ss.map(_.accept)
ss.map(s => s.accept())
map
tiếp theo cũng nhận function, nhưng nhận theo kiểu closure, mà closure này lại nhận parameter theo dạng pattern maching. Vì vậy bạn đọc nó hơi khó hiểu chút.
Hai đoạn code dưới đây tương đương với nhau:
ss.map(_.accept).map(socket => {
socket match {
case Some(socket) => ProtocolHandler(...)
}
})
ss.map(_.accept).map {
socket => ProtocolHandler(...)
}
Phần này mình trả lời thêm…
Class Option[T]
có 2 subclasses là Some[T]
và None
. Some
có companion object, object đó có method apply()
gọi new Some(...)
. Vì vậy có thể bỏ bớt từ khoá new
khi viết code.
Hai đoạn code sau như nhau:
ss = Some(new ServerSocket(...))
ss = new Some(new ServerSocket(...))
Phần catch
cũng có thể sử dụng pattern matching
catch {
case e if e eq IOHandlerException => println(e)
case e => println(e)
}
catch {
if (e eq IOHandleException) {
println(e)
else {
println(e)
}
}
Tất cả operator trong Scala đều là method, phép +
cũng là 1 method
1 + 2
(1).+(2)
2 + 3 * 4
(2).+((3).*(4))
e eq IOException
e.eq(IOException)