LỜI CẢM ƠN Sau một thời gian tìm hiểu và thực hiện đến nay đề tài “Tìm hiểu lập trình hàm với ngôn ngữ F và xây dựng ứng dụng minh họa” đã hoàn thành. Với đề tài, em mong muốn hiểu rõ về ngôn ngữ F và xây dựng được ứng dụng phục vụ cho các lĩnh vực của đời sống. Em xin chân thành cảm ơn thầy cô trong Khoa CNTT đã tận tình giảng dạy, chỉ bảo, trang bị cho em những kiến thức cần thiết nhất trong suốt quá trình học tập và nghiên cứu tại khoa, đã tạo mọi điều kiện giúp em thực hiện đề tài tốt nghiệp này. Em xin cảm ơn cô Nguyễn Thị Thanh Huệ và thầy Đào Anh Hiển đã tận tình hướng dẫn, chỉ bảo em trong suốt thời gian thực hiện đề tài. Trong quá trình làm việc với các thầy, cô em đã học hỏi được nhiều kiến thức bổ ích và kinh nghiệm quý báu làm nền tảng cho quá trình học tập, làm việc và nghiên cứu sau này. Em đã nỗ lực cố gắng với quyết tâm cao để thực hiện đề tài này, nhưng cũng không tránh khỏi những thiếu sót, kính mong quý thầy cô tận tình chỉ bảo. Một lần nữa, em xin chân thành cảm ơn PHẦN I: MỞ ĐẦU 1. Lý do chọn đề tài Công nghệ thông tin đóng vai trò quan trọng trong sự phát triển của xã hội thời đại ngày nay. Công nghệ thông tin đã trở thành nhân tố quan trọng, là cầu nối trao đổi giữa các thành phần của xã hội toàn cầu, của toàn cầu, của mọi vấn đề. Việc nhanh chóng đưa ứng dụng công nghệ thông tin và quá trình tự động hóa trong sản xuất kinh doanh là vấn đề đang, đã và luôn được quan tâm bởi lẽ công nghệ thông tin có vai trò rất lớn trong các hoạt động kinh tế, sản xuất kinh doanh, bán hàng, xúc tiến thương mại, quản lý trị trong doanh nghiệp. Cùng với sự phát triển mạnh mẽ của nền kinh tế, một trong những lĩnh vực đang phát triển nhanh nhất hiện nay là Công nghệ thông tin. Trong hệ thống nghành nghề được đào tạo ở các bậc Đại học, Cao đẳng Công nghệ thông tin luôn được xem là sự lựa chọn thông minh của các học sinh phổ thông và các bậc phụ huynh hướng nghiệp cho con em mình. Trước sự phát triển vượt bậc của công nghệ thông tin như vậy em quyết định chọn đề tài: “Tìm hiểu lập trình hàm với ngôn ngữ F và xây dựng ứng dụng minh họa” làm đồ án 4 và phát triển làm đồ án tốt nghiệp. 2. Ưu, khuyết điểm a. Ưu điểm Đề tài có tính tự nghiên cứu cao Xuất phát từ nhu cầu thực tế cần mở rộng tìm hiểu ngôn ngữ mới, phương pháp mới để giải quyết các vấn đề phức tạp. b. Khuyết điểm Vì là ngôn ngữ mới ít được mọi người biết đến nên khó trong việc tiếp cận. 3. Hướng tiếp cận của đề tài Tìm hiểu trực tiếp qua các tài liệu trên internet.
Trang 1Em xin cảm ơn cô Nguyễn Thị Thanh Huệ và thầy Đào Anh Hiển đã tận
tình hướng dẫn, chỉ bảo em trong suốt thời gian thực hiện đề tài Trong quá trình làm việc với các thầy, cô em đã học hỏi được nhiều kiến thức bổ ích và kinh nghiệm quý báu làm nền tảng cho quá trình học tập, làm việc và nghiên cứu sau này.
Trang 2Em đã nỗ lực cố gắng với quyết tâm cao để thực hiện đề tài này, nhưng cũng không tránh khỏi những thiếu sót, kính mong quý thầy cô tận tình chỉ bảo.
Một lần nữa, em xin chân thành cảm ơn!
PHẦN I: MỞ ĐẦU
1 Lý do chọn đề tài
Công nghệ thông tin đóng vai trò quan trọng trong sự phát triển của xã hội thời đại ngày nay Công nghệ thông tin đã trở thành nhân tố quan trọng, là cầu nối trao đổi giữa các thành phần của xã hội toàn cầu, của toàn cầu, của mọi vấn
đề Việc nhanh chóng đưa ứng dụng công nghệ thông tin và quá trình tự động hóa trong sản xuất kinh doanh là vấn đề đang, đã và luôn được quan tâm bởi lẽ công nghệ thông tin có vai trò rất lớn trong các hoạt động kinh tế, sản xuất kinh doanh, bán hàng, xúc tiến thương mại, quản lý trị trong doanh nghiệp Cùng với sự phát triển mạnh mẽ của nền kinh tế, một trong những lĩnh vực đang phát triển nhanh nhất hiện nay là Công nghệ thông tin Trong hệ thống nghành nghề được đào tạo ở các bậc Đại học, Cao đẳng Công nghệ thông tin luôn được xem là sự lựa chọn thông minh của các học sinh phổ thông và các bậc phụ huynh hướng nghiệp cho con em mình.
Trang 3Trước sự phát triển vượt bậc của công nghệ thông tin như vậy em quyết
định chọn đề tài: “Tìm hiểu lập trình hàm với ngôn ngữ F# và xây dựng ứng dụng minh họa” làm đồ án 4 và phát triển làm đồ án tốt nghiệp.
2 Ưu, khuyết điểm
a Ưu điểm
- Đề tài có tính tự nghiên cứu cao
- Xuất phát từ nhu cầu thực tế cần mở rộng tìm hiểu ngôn ngữ mới, phương pháp mới để giải quyết các vấn đề phức tạp.
b Khuyết điểm
Vì là ngôn ngữ mới ít được mọi người biết đến nên khó trong việc tiếp cận.
3 Hướng tiếp cận của đề tài
- Tìm hiểu trực tiếp qua các tài liệu trên internet.
PHẦN II NỘI DUNG CHƯƠNG I TỔNG QUAN VỀ NGÔN NGỮ Fsharp (F#) 1.1 F# là gì?
Lập trình hàm là một cách tiếp cận tuyệt vời để giải quyết nhiều vấn đề tính toán gai góc nhưng lập trình hàm không thích hợp cho lập trình đa năng.Vì thế, các ngôn ngữ lập trình hàm đã từng bước được đưa vào các khía cạnh của mô hình lập trình cấu trúc và hướng đối tượng.Tức là giữ lại những điều cốt lõi của mô hình lập trình hàm nhưng tích hợp thêm vào những đặc điểm cần thiết để có thể dễ dàng viết được bất cứ loại chương trình nào.
F# là ngôn ngữ lập trình hàm trên nền tảng NET F# hợp nhất cả 3 mô hình: lập trình hàm, lập trình cấu trúc và lập trình hướng đối tượng.Với F#, bạn có thể chọn bất cứ mô hình nào để giải quyết các vấn đề, các bài toán sao cho hiệu quả nhất hoặc nếu muốn bạn cũng có thể kết hợp cả 3 phong cách lập trình trên vào trong một chương trình để khai thác thế mạnh của mỗi mô hình F# được tích hợp hoàn toàn vào NET Framework, nên việc sử dụng F# cũng đơn giản như C#.
Trang 4Lập trình chức năng từ lâu đã truyền cảm hứng cho các nhà nghiên cứu, học sinh, và người lập trình cũng như với sự đơn giản và sức mạnh biểu hiện của nó Lập trình sử dụng chức năng đang bùng nổ: một thế hệ mới của ngôn ngữ chức năng đang đạt tới sự hoàn thiện; một số cấu trúc của ngôn ngữ chức năng đã được tích hợp vào ngôn ngữ như C#, Python, vàVisualBasic; và bây giờ có một cộng đồng chuyên môn về các ứng dụng thực tế của kỹ thuật lập trình chức năng Và có những bằng chứng mạnh mẽ chứng tỏ rằng lập trình chức năng đã tạo ra những thành tựu đáng kể về mặt năng suất trong những lĩnh vự cứng dụng quan trọng như truy cập dữ liệu, mô hình tài chính, phân tích thống kê, kĩ thuật học, kiểm tra phần mềm, khoa học thông tin trong sinh học Gần đây hơn, lập trình chức năng đã là một phần của sự gia tăng của mô hình lập trình khai báo, đặc biệt là trong các truy vấn dữ liệu, đồng bộ hóa, và lĩnh vực lập trình song song.
F# khác với các ngôn ngữ lập trình chức năng khác ở chổ nó bao hàm cả lập trình bắt buộcvà lập trìnhhướng đối tượng Nó cũng cung cấp một sự liên kết giữa ngôn ngữ biên dịch và ngôn ngữ động, kết hợp các đặc ngữ và phong cách lập trình đặc trưng của ngôn ngữ động với hiệu suất và sự mạnh
mẽ của một ngôn ngữ biên dịch Những người thiết kế F#đã kế thừa một phong cách thiết kếcho phép bạn có những khía cạnh tốt nhất và hiệu quả nhất của các mô hình và kết hợp chúng trong khi vẫn đặt trọng tâm chính về
kỹ thuật lập trình chức năng.
F # và NET cung cấp một cách tiếp cận mới đối với lập trình trên máy tính và nó sẽ tiếp tục gây ngạc nhiên và thích thú, và việc làm chủ kỹ thuật lập trình chức năng sẽ giúp bạn trở thành một lập trình viên tốt hơn bất kể ngôn ngữ mà bạn sử dụng Không có thời gian nào tốt hơn để học lập trình chức năng, và F# cung cấp con đường tốt nhất để tìm hiểu và áp dụng các chức năng lập trình trên nền tảng NET.
Trang 5tục được phát triển tại Microsoft Developer Division.
F# bắt đầu xuất hiện từ năm 2005 và phiên bản mới nhất hiện nay đó là F# 2.0 (phát hành ngày 17/08/2010) và là một phần của Visual Studio 2010.
F# bắt đầu vào năm 2002 khi DonSyme và những người khác tại bộ phận nghiên cứu của Microsoft quyết định để đảm bảo rằng "ML" tiếp cận với thực tế nhưng việc thiết kế một ngôn ngữ dựa trên lý thuyết đã tìm ra dấu nhấn có chất lượng cao cho nền tảng NET Dự án được gắn liền với việc thiết kế và thực hiện các Generics cho các NET Common Language Runtime.Phiên bản chính thức đầu tiên trước phát hành của F# là trong năm 2005.
F#lấy phần ngôn ngữ cốt lõi từ ngôn ngữ lập trình OCaml, và theo một cách nào
đó nó có thể được gọi là một"OCaml cho NET" F# không thể tồn tại mà không có OCaml, một thành viên trong gia đình của ngôn ngữ lập trình ML, có từ năm 1974.F#cũng rút ra từ Haskell, đặc biệt đối với hai tính năng ngôn ngữ tiên tiến được gọi là sequence expressions và workflows Vẫn có những kết nối mạnh mẽ giữa các nhà thiết kế của những ngôn ngữ nàyvà chồng chéo trong cộng đồng những người sử dụng của họ Lý do cơ bản để các nhà thiết kế quyết định tiếp tục phát triển F# là tài liệu trên trang web dự án củaF#.
Mặc dù có những điểm tương đồng với Ocaml và Haskell, thế nhưng lập trình với F#là hoàn toàn khác biệt Trong đó, F# tiếp cận cách suy luận, cách lập trình hướng đối tượng, và các kỹ thuật ngôn ngữ động thực tế là khác biệt với tất cả các ngôn ngữ chức năng chính thống khác Lập trìnht rongF#có xu hướng làm sao để hướng đối tượng hơn so với các ngôn ngữ hức năng khác Việc lập trình cũng có xu hướng làm sao đểl inh hoạt hơn F# bao hàm các kỹ thuật NET như nạp động (dynamic loading), gõđộng (dynamic typing), và ánh xạ (reflection), và nó cũng thêm vào các kỹ thuật như trích dẫn nhấn mạnh (expression quotatio) và cácmô hình năng động (active patterns).
F# cũng nợ rất nhiều các nhà thiết kế của.NET, người có tầm nhìn về khả năng tương tác ngôn ngữ giữa C++, Visual Basic, và"ngôn ngữ mà cuối cùng đã trở thành C#"vẫn đang khuấy động nền công nghiệp máy tính hiện nay Ngày nay F# rút ra nhiều từ các cộng đồng lớn xung quanh Cơ Sở Hạ Tầng Ngôn Ngữ Chung (Common Language Infrastructure - CLI) Phiên bản chuẩn này được bổ sung bởi Microsoft.NETFramework, Mono, và đối tác thực thi môi trường Silverlight của
Trang 6Microsoft F# có thể tận dụng các thư việnvà các kỹ thuật được phát triển bởi Microsoft, rộng hơn là cộng đồng .NET, và cao hơn nữa là cộng đồng mã nguồnmởMono Chúng bao gồm hàng trăm thư viện quan trọngvà các ngăn xếp thực thi chính như truy vấn ngôn ngữ tích hợp sử dụng LINQ của Microsoft.
CHƯƠNG II ĐẶC ĐIỂM CỦA NGÔN NGỮ F#
2.1 F# hỗ trợ lập trình hướng đối tượng
F# cho phép trừu tượng hóa code vào classes và objects, cho phép đơn giản hóa code.
2.2 F# hỗ trợ lập trình hàm
Là một phong cách lập trình tập trung vào những gì mà chương trình sẽ làm chứ không phải là nó sẽ làm việc như thế nào? Ngoài ra, F# là một ngôn ngữ sử dụng kiểu suy luận, nghĩa là các kiểu dữ liệu không cần phải khai báo rõ ràng bởi người lập trình mà chúng sẽ được suy ra bởi trình biên dịch trong quá trình biên dịch.
Ví dụ: let sum (a, b) = a+ b
//không cần tường minh a,b thuộc kiểu gì
2.3 F# liên kết chặt chẽ với NET
F# liên kết chặt chẽ với NET và cho phép bạn làm được tất cả những
gì NET có thể F# biên dịch được tất cả những bản cài đặt theo đặc tả Common Language Infrastructure(CLI), và file thực thi được tạo ra chạy
Trang 7được trên tất cả những môi trường có CLI Điều này có nghĩa là F# không bị giới hạn bởi Windows, mà còn có thể chạy được trên Linux, Apple Mac OS X
và OpenBSD Hơn thế nữa, F# tích hợp mật thiết với NET Framework Base Class Library(BCL) Việc sử dụng BCL trong F# đôi khi còn đơn giản hơn trong C# hay VB.NET.
2.4 Môi trường tương tác
1 Môi trường kiểu F# khác hẳn nhưng môi trường ngôn ngữ mà ta quen thuộc và đây không phải là môi trường thông dịch mà là biên dịch động tức thời.
F# InteractiveVisual F# cung cấp một cửa sổ tương tác được tích hợp vào môi trường visual studio Cửa sổ này cho phép bạn nhập F# code và nó sẽ biên dịch và thực thi ngay lập tức Điều này cho phép bạn dễ dàng xây dựng các prototype code constructor và kiểm tra code khi bạn viết.
Để mở cửa sổ F# Interactive bạn vào: View -> Others Window -> F# Interactive hoặc dùng tổ hợp phím tắt Ctrl + Alt +F.
Khi bạn code chương trình sẽ biên dịch và thực khi đến khi gặp 2 dấu chấm phẩy (;;).
f.Text<- “hello world”;;
7 Thì Form của bạn sẽ lập tức thay đổi tiêu đề thành “hello world”.
Trang 82.5 Cú pháp đơn giản
F# có cú pháp nhóm các phần không phải bằng các cặp từ khóa, hay các cặp {} mà bằng cách thụt dòng.
2.6 Tính khái quát hóa tự động
F# là ngôn ngữ có cơ chế khái quát hóa tự động Sự kết hợp của khái quát hóa tự động làm cho chương trình đơn giản hơn, gọn hơn , tổng quát hơn Nó cũng tăng khả năng tái sử dụng Các ngôn ngữ không có cơ chế khái quát hóa buộc người lập trình phải tính toán và viết ra một cách tường minh kiểu khái quát nhất của các hàm của họ.
Các hàm không phụ thuộc vào kiểu dữ liệu của biến được F# khái quát hóa tự động.
Ví dụ: let swap (x,y)=(y,x)
act -chỉ ra một phương thức không được phép thực thi hoặc chỉ ra nó là một trừu tượng
And Sử dụng trong bindings đệ qui, khai báo
thuộc tính và khai báo nhiều điều kiện chung cho tham số
As Dùng trong khai báo lớp.
Dùng trong việc gán cho một tâp hợp (as pattern).
Asser
t Dùng để xác minh mã trong thời gian gỡ lỗi.
Base Dùng làm tên lớp cơ sơ.
Begi
n Bắt đầu một khối mã.
Class Khai báo lớp.
Defa
ult Thực thi một phương thức trừu tượng.Dùng với một phương thức trừu
tượng để tạo ra một phương thức ảo.
Dele
gate Khai báo một delegate.
Do Sử dụng trong vòng lặp hoặc thực thi mã bắt
Trang 9Elif Điều kiện phân nhánh.
Else Sử dụng trong cú pháp điều kiện phân nhánh.
End -Trong định nghĩa kiểu và mở rộng kiểu
cho biết kết thúc một phần của định nghĩa thành viên.
-Kết thúc trong cú pháp verbose Exep
tion Khai báo ngoại lệ
Exter
n Phạm vi tương tác của đối tượng khai báo là trong cùng khối nhị phân hoăc assembly
False Giá trị sai kiểu boolean
Final
ly Sử dụng trong cú pháp try catch ngoại lệ, khối mã bên trong được thưc hiện dù có
xảy ra ngoại lệ không.
For Sử dụng trong cấu trúc vòng lặp for
Fun Được sử dụng trong các biểu thức lambda
Funti
on Sử dụng như từ khóa fun, sử dụng trong biểu thức match
Glob
al Không gian (namespace) cao nhất trong NET
If Câu điều kiện if
In Sử dụng trong vòng lặp for…in, được dùng
trong cú pháp verbose Inhe
rit Được sử dụng để xác định lợp cơ sở hoặc giao diện
Inter
face Sử dụng để khai báo và thực thi các giao diện.
Inter
nal Sử dụng để chỉ ra một thành viên có thể được thấy trong một khối assembly
Lazy Tính toán lazy
Let Được sử dụng để liên kết, kết nối, đặt tên
cho một giá trị hoặc chức năng.
Trang 10New Được dùng để kê khai, xác định hay gọi
một cấu trúc tạo ra một đối tượng.Dùng để ràng buộc một kiểu phải có một hàm tạo nhất định.
Not Không thực sự là một từ khóa nhưng nó
được dùng trong các ràng buộc tham số Null Chỉ ra sự vắng mặt của một đối
tượng.Cũng được dùng như một tham số chung
Open Dùng để tạo ra một không gian sử dụng có
c Chỉ ra là phương thức có thể được gọi mà không cần tạo ra một đối tượng cụ thể.
Stuct Khai báo một cấu trúc
Then Sử dụng trong biểu thức điều kiện
To Sử dụng trong vòng lặp
True Giá trị của kiểu Boolean
Try Sử dụng trong biểu thức try catch finally
xử lý ngoại lệ Type Được sử dụng để khai báo một lớp, record,
struct, union, enum Use Sử dụng trong quản lý tài nguyên
Val Được sử dụng để chỉ ra một giá trị hoặc
một kiểu Void Kiểu void trong NET
Trang 112.8 Danh mục các kí hiệu và toán tử
-‘’ Giới hạn một chiểu văn bản.
# -Các tiền xử lý hoặc chỉ thị trình biên dịch
-khi sử dụng với một kiểu chỉ ra một kiểu linh hoạt, trong đó đề cập đến một loại hoặc một trong bất kỳ các loại có nguồn gốc từ nó.
$ Sử dụng trong các biến hoặc hàm của
trình biên dịch
% -Tính số dư của phép chia
-Dùng trong trích dẫn
& -Tính địa chỉ của một giá trị mutable để sử
dụng khi tích hợp với các ngôn ngữ khác.
-Sử dụng trong mẫu AND
&& Tính toán tử đúng/sai và toán tử AND
&&& Tính toán tử bitwise AND
‘ -giới hạn một ký tự đơn
-chỉ ra một tham số kiểu chung chung.
() Đại diện các giá trị duy nhất của unit type
(…) -chỉ ra thứ tự mà biểu hiện được đánh giá.
-giới hạn một tuples -được sử dụng trong định nghĩa toán tử.
(*…*) -giới hạn một chú thích có thể nối qua
Trang 12nhân trong một tên đầy đủ.
-số thập phân Chỉ định 1 phạm vi
Chỉ định 1 phạm vi đồng thời có sự tăng
tiến […] Truy cập một phần tử mảng.
:= Gán một giá trị cho một tham số.
:> Chuyển một kiểu lên cao hơn.
:? True nếu đúng với mẫu False nếu sai.
?> Chuyển một kiểu sang kiểu thấp hơn.
<- Gán giá trị cho một biến.
<…> Giới hạn loại tham số.
Trang 13chuỗi và ký tự.
^ Chỉ định các tham số dạng đó phải được
thực thi ở thời gian dịch chứ không phải ở thời gian chạy.
| Giới hạn mỗi phần tử phù hợp với trường
hợp, sử dụng trong các giá trị liệt kê.
|> ống dẫn kết quả bên trái qua phép tính
bên phải.
~~ Khai báo một tình trạng quá tải.
2.9 Độ ưu tiên của các toán tử
Toán tử Ưu tiên liên đới thực hiện
Trang 14CHƯƠNG III KIỂU DỮ LIỆU TRONG F#
3.1.Cú pháp của kiểu dữ liệu trong F#
Trong F# , mỗi kiểu đều có định dạng ngữ pháp và ta sử dụng các định dạng ấy trong chú thích kiểu, khai báo phương thức, delegate, chữ ký và các cấu trúc khác… Khi ta khai báo một cấu trúc chương trình trong trình thông dịch, trình thông dịch in tên cấu trúc và ngữ pháp của kiểu dữ liệu cho cấu trúc ấy Cấu trúc ấy có thể chỉ là 1 nhận dạng cho kiểu tự định nghĩa hay một nhận dạng dựng sẵn cho kiểu int hoặc string, đối với kiểu phức tạp hơn, thì ngữ pháp sẽ phức tạp hơn.
Kiểu generic Type-params
generic-type Generic- type<type- params>
‘a list List<’a>
Kiểu cấu trúc cụ
thể (generic cho
kiểu cụ thể)
Type-args generic-type Generic- type<type-args>
Int list List<int>
Kiểu hàm Type1 -> type2…
-> return-type Int->int Kiểu delegate Delegate of type Delegate of int-
>int
Trang 153.2 Kiểu suy diễn
Cơ chế suy diễn kiểu hỗ trợ lập trình viên không cần khai báo kiểu tường minh cho dữ liệu mà vẫn đảm bảo kiểu hợp ngữ cảnh và thỏa mãn yêu cầu an toàn kiểu
Ý tưởng của cơ chế suy diễn là lập trình viên không cần mô tả kiểu của cấu trúc trừ khi trình biên dịch không thể suy diễn kiểu Bỏ qua khai báo tường minh không có nghĩa là F# là ngôn ngữ kiểu động hay là ngôn ngữ định kiểu yếu F# là ngôn ngữ định kiểu tĩnh, trình biên dịch có thể suy diễn chính xác trong quá trình dịch Nếu không có đủ thông tin cho sự suy diễn , lập trình viên cần bổ sung thông tin về kiểu như ghi chú kiểu
Khi không khai báo tường minh kiểu,trình biên dịch suy diễn kiểu dựa trên ngữ cảnh Nếu không có cách suy diễn ra kiểu cụ thể, trình biên dịch sẽ suy diễn ra kiểu generic Nếu mã lập trình không thống nhất, dẫn đến việc không có kiểu suy diễn nào thỏa mãn thì trình biên dịch sẽ báo lỗi Kiểu trả về được quy định bởi biểu thức cuối của hàm
nt64 Giá trị từ 0 to 18,446,744,073,709,551,615.
Trang 163.4 Kiểu Unit
Kiểu unit là kiểu dữ liệu đại diện cho tính hiện diện của giá trị , kiểu unit chỉ có
1 giá trị và được xem như là 1 thay thế khi không có giá trị khác tồn tại hoặc không cần thiết.
Mọi biểu thức của F# đều trả về giá trị, nếu biểu thức không xuất giá trị cụ thể, thì giá trị của kiểu unit sẽ được sử dụng Kiểu unit tương đương với kiểu void trong ngôn ngữ C# và C++.
Kiểu unit chỉ có 1 giá trị duy nhất được kí hiệu là ().
Giá trị unit được dùng trong lập trình F# trong trường hợp đòi hỏi xuất giá trị những không có giá trị cụ thể mong muốn Ví dụ giá trị trả về của hàm printf , hàm thực thi không đòi hỏi xuất giá trị cụ thể,nên giá trị sẽ là kiểu unit
Một số cấu trúc đòi hỏi giá trị unit Ví dụ, kết buộc ‘do’ hoặc mã ở vị trí cấp cao trong module vốn đòi hỏi kết xuất giá trị unit Trình biên dịch sẽ cảnh báo khi giá trị kết xuất khác kiểu unit và không được sử dụng.
Trang 17Cảnh báo này là một đặc tính của lập trình hướng chức năng Nó không hiện diện trong ngôn ngữ lập trình NET khác Trong lập trình hướng chức năng thuần , khi mà không có hiệu ứng lề trong hàm, trị trả về cuối cùng là kết quả duy nhất của lời gọi hàm Do vậy,khi kết quả bị bỏ qua , lỗi lập trình có thể xuất hiện Mặc dù F# không phải là ngôn ngữ lập trình chức năng thuần, nhưng nên thực hành chuẩn lập trình chức năng khi có thể.
3.5 Kiểu chuỗi
Kiểu chuỗi xác định một dãy kí tự Unicode.
Hằng chuỗi sử dụng dấu ngăn nháy kép (“), kí tự xổ về (‘\’) dùng để giải nghĩa cho các kí tự đặc biệt, tạo thành dãy thoát nghĩa, ví dụ như ‘\n’ (kí tự xuống hàng mới), ‘\t’ (kí tự tab)…
Việc thêm kí tự @ trước chuỗi cho phép bỏ qua các dãy thoát nghĩa, biến chúng thành kí tự thường.
3.6 Kiểu Tuple
- Định ngĩa : Tuple là kiểu dữ liệu không tên, nhóm các giá trị có kiểu không nhất thiết giống nhau Kiểu Tuple là tập hợp các kiểu (có thể khác nhau) có thứ tự.
Ví dụ : Tuple của 2 số nguyên (1, 2)
//Tuple của các kiểu khác nhau
- Để bind một giá trị tuple với một ký hiệu tuple ta dùng từ khóa “let”
Ví dụ: Let (name, class,age)=(“thanhhai”,”TK10LC2”,23)
Printfn “%A” name
Printfn “%A” (name,age)