[memo] lazy valuation với function trong scala
Scala
50
White

huydx viết ngày 25/11/2015

Thông thường trong scala chúng ta dùng từ khoá lazy để "đánh giá chậm" 1 biến, tức là khi nào biến đó được sử dụng thì vế phải mới được thực thi

lazy val foo = 123

Nhiều khi vế phải không chỉ là một phép gán mà có thể là một xử lý khá nặng như là lấy connection từ database, hay là lấy giá trị từ một file rất lớn, khi đó thì lazy evaluation khá là hữu ích trong việc giúp cho chương trình lúc mới khởi động không bị bottle neck.

Tuy nhiên cần chú ý là vế phải nhiều khi có thể không đơn giản là một giá trị, mà có thể là 1 hàm

lazy val foo: Unit = {
  //do something
}

Khi đó cần chú ý là hàm này sẽ chỉ được thực hiện một lần, dù chúng ta có gọi foo bao nhiêu lần đi nữa, vì việc sử dụng lazy val đã giúp cho giá trị được cache lại.

foo //do just one time
foo
foo

Cơ mà các bạn sẽ hỏi, foo là Unit làm gì có giá trị ở đây mà cache?
Thực ra thì foo chính xác là tham chiếu đến hàm Unit, và việc cache ở đây chính là cache cái tham chiếu đó. Khi gọi foo lần thứ 2, thì giá trị tham chiếu của foo sẽ được trả về , khiến cho phần Unit sẽ không được execute nữa.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

huydx

115 bài viết.
858 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
135 8
Introduction (Link) là một cuộc thi ở Nhật, và cũng chỉ có riêng ở Nhật. Đây là một cuộc thi khá đặc trưng bởi sự thú vị của cách thi của nó, những...
huydx viết hơn 1 năm trước
135 8
White
109 14
Happy programmer là gì nhỉ, chắc ai đọc xong title của bài post này cũng không hiểu ý mình định nói đến là gì :D. Đầu tiên với cá nhân mình thì hap...
huydx viết gần 3 năm trước
109 14
White
86 10
(Ảnh) Mở đầu Chắc nhiều bạn đã nghe đến khái niệm oauth. Về cơ bản thì oauth là một phương thức chứng thực, mà nhờ đó một web service hay một ap...
huydx viết hơn 2 năm trước
86 10
Bài viết liên quan
White
10 0
Kí tự Regex cơ bản Về cơ bản thì các sử lý matching của scala.util.matching.Regex sẽ được "phó thác" (delegate) cho java Regex. Bạn có thể tạo một ...
huydx viết hơn 2 năm trước
10 0
White
7 1
Trong scala kí tự _ được dùng với khá nhiều mục đích .. không liên quan đến nhau. Tạm note lại cái đã khi nào có time sẽ quay lại viết cẩn thận sa...
huydx viết hơn 2 năm trước
7 1
White
0 0
(Bài viết hơi khó hiểu, dành cho bạn nào có hứng thú với type programming trong scala với các thư viện như shapeless chẳng hạn) Thông thường với m...
huydx viết gần 2 năm trước
0 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
115 bài viết.
858 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!