Trường Đại học Bách Khoa Hà Nội
Viện CNTT-TT
Lập trình Java.
Đề tài: Tìm hiểu về Monadic Operations.
Thành viên:
MSSV
Giáo viên hướng dẫn
Đậu Văn Thắng
20112678
Nguyễn Hồng Quang
Hà Nội, 8/9/2014
Page | 1
Contents
Page | 2
I. Lý thuyết.
3. PROGRAMING WITH LAMDAS.
3.10. Monadic Operations.
Khi làm việc với các loại dữ liệu tổng quát, và các hàm phải đưa ra các kết quả (với các
kiểu khác nhau), thì việc áp dụng Monadic Operations giúp bạn dễ dàng tạo ra nhiều hàm
như vậy. Trong phần này chúng ta sẽ cùng nhau tìm hiểu mẫu thiết kế cho Monadic
Operations.
Giả sử chúng ta có một dữ liệu tổng quát là G với một tham số. Nó bao gồm một số
dữ liệu cụ thể hơn như:
1. List: Bao gồm một hoặc nhiều giá trị loại T.
2. Optional: Không có giá trị hoặc chỉ có một giá trị loại T.
3. Future: Phải có ít nhật một giá trị loại T trong danh sách.
Chúng ta cũng giả sử có một function T U hoặc coi như một đối tượng
Function< T,U >.
Thông thường thì chúng ta sẽ phải làm việc với các dữ liệu G (dữ liệu tổng quát) thay
vì làm việc với các dữ liệu cụ thể hơn như List, Optional hay Future. Vậy
làm sao có thể thực hiện một cách chính xác khi làm việc với G. Ví dụ như khi áp
dụng hàm f với một List gồm phần tử: e 1, e2, …, en nghĩa là phải tạo ra một danh sách các
phần tử f(e1), f(e2),…, f(en).
Áp dụng hàm f cho Optional chứa phần tử v nghĩa là phải tạo Optional chứa
f(v). Nhưng nếu khi áp dụng f với Optional không có phần tử nào thì dĩ nhiên
Optional cũng sẽ không có một phần tử nào.
Áp dụng hàm f cho Future thì sẽ được thực hiện chỉ khi nó có giá trị. Kết quả trả về
là Future.
Thông thường khi tiến hành xử lý thì chúng ta sẽ sử dụng một phương thức được gọi là
“map”. Hiểu đơn giản “map” sẽ giúp chúng ta áp dụng hàm f tạo ra G từ G trong
đó khi áp dụng f thì T U, việc này sẽ được xử lý ở mỗi phần tử trong hàm dó đó nó sẽ
dễ dàng tiến hành với các trường hợp cụ thể như List, Optional hay Future.
Chúng ta có thể thấy “map” là một ý tưởng khá là đơn giản. Chúng ta có thể làm phức tạp
hơn khi nhìn vào function T G thay vì T U. Một ví dụ khi chúng ta lấy nội
dung từ trên web thông qua URL. Chúng ta sẽ phải một một ít thời gian để lấy được trang
web về, sau đó sẽ thực hiện function URL Future. Chúng ta sẽ chờ đợi URL
đến, sau đó cho nó vào Function và chờ đợi chuỗi string trả về. Quá trình hoạt động như
vậy gọi flatMap
Page | 3
Dạng URL Future chính là một trường hợp cụ thể của “flatMap”. Thay vì
chuyển từ đối tượng G G nó tiến hành chuyển từ T G.
Ở đây sử dụng flatMap cho Optional cũng được. Chúng ta sẽ có function T
Optional, flatMap sẽ giải nén các giá trị trong Optional và áp dụng vào function (trừ
khi cả giá trị ban đầu và giá trị kết quả đều không tồn tại).
Trên đây là những kiến thức về Monadic Operations. Đây là một kiến thức khá mới nên
mới đầu đọc còn khó hiểu sau đây chúng ta sẽ cùng tìm hiểu một ví dụ để có thể hiểu rõ
hơn về chủ đề này.
public class Optional {
private static final Optional EMPTY = new Optional(null);
private final T value;
private Optional(T value) {
this.value = value;
}
public Optional map(Function ... trị ban đầu giá trị kết không tồn tại) Trên kiến thức Monadic Operations Đây kiến thức nên đầu đọc khó hiểu sau tìm hiểu ví dụ để hiểu rõ chủ đề public class Optional { private static final Optional... LAMDAS 3.10 Monadic Operations Khi làm việc với loại liệu tổng quát, hàm phải đưa kết (với kiểu khác nhau), việc áp dụng Monadic Operations giúp bạn dễ dàng tạo nhiều hàm Trong phần tìm hiểu mẫu... dụng Monadic Operations giúp bạn dễ dàng tạo nhiều hàm Trong phần tìm hiểu mẫu thiết kế cho Monadic Operations Giả sử có liệu tổng quát G với tham số Nó bao gồm số liệu cụ thể như: List: