[polldaddy poll=9764234]
Ngôn ngữ nào cũng có tập các thư viện giúp ta giải quyết nhanh những công việc nào đó, và chắc chắn chúng ta phải sử dụng vì ta không thể tự viết ra được, ta phải biết cách sử dụng nó. Các thư viện này có thể nằm trong JVM hay KotlinJavaRuntime hay ở bất kỳ thư viện ngoài nào khác:
Trong bài này Tui sẽ trình bày một số thư viện thường dùng như:
- Thư viện xử lý dữ liệu số
- Thư viện xử lý ngày tháng
- Thư viện xử lý toán học
- Thư viện xử lý số ngẫu nhiên
- Thư viện xử lý chuỗi
Và còn rất nhiều thư viện xử lý khác nữa, khi nào gặp ta lại ngâm cứu tiếp
Các thư viện này có thể được sử dụng từ JVM, Bây giờ Tui đi vào chi tiết từng thư viện xử lý
- Thư viện xử lý dữ liệu số
Muốn định dạng chữ số thập phân cho số thực ta có thể dùng format sau:
[code language=”groovy”]
fun main(args: Array) {
var d:Double=10.0/3.0
println(d)
println(“%.2f”.format(d))
}
[/code]
Kết quả xuất ra màn hình khi chưa định dạng và đã định dạng thập phân:
3.3333333333333335 3.33 |
“%.2f” là cú pháp định số thập phân, ở trong Tui để số 2 tức là 2 số thập phân, bạn muốn bao nhiêu số thì tự thay thế.
Ta có thể sử dụng thư viện DecimalFormat nằm trong JVM để định dạng số, ví dụ dưới đây minh họa tạo ngăn cách phần nghìn:
[code language=”groovy”]
import java.text.DecimalFormat
import java.text.DecimalFormatSymbols
import java.util.Locale
/**
* Created by cafe on 28/05/2017.
*/
fun main(args: Array) {
var x:Int=986553823
var dcf=DecimalFormat(“#,###”)
var dcfs=DecimalFormatSymbols(Locale.getDefault())
dcfs.groupingSeparator=’,’
dcf.decimalFormatSymbols=dcfs
println(x)
println(dcf.format(x))
}
[/code]
Kết quả khi chạy chương trình:
986553823 986,553,823 |
Chú ý những dòng lệnh import ở trên là IntelliJ IDEA tự import giùm, ta chỉ cần gõ Control +Space khi dùng các thư viện thì tự động nó xuất hiện. Kotlin giúp ta triệu gọi thư viện trong JVM một cách dễ dàng nhất giúp các lập trình viên Java dễ chuyển đổi ngôn ngữ
- Thư viện xử lý ngày tháng
Khi xử lý ngày tháng năm ta thường dùng 3 thư viện:
Date
Calendar
SimpleDateFormat
Các thư viện này nằm trong gói:
import java.util.Date
import java.util.Calendar
import java.text.SimpleDateFormat
- Lấy ngày tháng năm hiện tại:
var cal=Calendar.getInstance()
- Lấy từng tiêu chí
var year=cal.get(Calendar.YEAR)
var month=cal.get(Calendar.MONTH)
var day=cal.get(Calendar.DAY_OF_MONTH)
- Thay đổi thông số ngày tháng năm:
cal.set(Calendar.YEAR, 1990);
cal.set(Calendar.MONTH,2)
cal.set(Calendar.DAY_OF_MONTH,20)
- Lấy đối tượng ngày tháng năm:
var date=cal.time
- Để định dạng ngày tháng năm dd/MM/YYYY
var date=cal.time
var sdf=SimpleDateFormat(“dd/MM/yyyy”);
println(sdf.format(date))
Ví dụ:
[code language=”groovy”]
import java.util.Date
import java.util.Calendar
import java.text.SimpleDateFormat
/**
* Created by cafe on 28/05/2017.
*/
fun main(args: Array) {
var cal=Calendar.getInstance()
var year=cal.get(Calendar.YEAR)
var month=cal.get(Calendar.MONTH)
var day=cal.get(Calendar.DAY_OF_MONTH)
println(“Năm=$year”)
println(“Tháng=$month”)
println(“Ngày=$day”)
var date=cal.time
var sdf=SimpleDateFormat(“dd/MM/yyyy”);
println(sdf.format(date))
var sdf2=SimpleDateFormat(“dd/MM/yyyy hh:mm:ss aaa”);
println(sdf2.format(date))
}
[/code]
Kết quả khi chạy chương trình:
Năm=2017 Tháng=4 Ngày=28 28/05/2017 28/05/2017 07:26:33 AM |
Chú ý tháng luôn chạy từ 0->11 nên khi ra số 4 chính là tháng 5 (ta có thể xem SimpleDateFormat xuất ra đúng tháng) .
hh:mm:ss aaa là định dạng giờ:phút:giây, aaa là AM hoặc PM . Muốn định dạng 24h thì thay hh thành HH
- Thư viện xử lý toán học
Để xử lý toán học ta dùng thư viện Math nằm trong gói java.lang
Một số phương thức thường dùng của Math:
Tên phương thức | Mô tả |
PI | Trả về giá trị PI |
abs(a) | Trả về trị tuyệt đối của a |
max(a,b) | Trả về giá trị lớn nhất giữa a và b |
min(a,b) | Trả về giá trị nhỏ nhất giữa a và b |
sqrt(a) | Trả về căn bậc 2 của a |
pow(x,y) | Tính lũy thừa xy |
sin(radian) | Tính sin, radian=Math.PI*góc/180 |
cos(radian) | Tính cos |
tan(radian) | Tính tan |
Ví dụ:
[code language=”groovy”]
/**
* Created by cafe on 28/05/2017.
*/
fun main(args: Array) {
println(“Số PI=”+Math.PI)
println(“Giá trị tuyệt đối của -4=”+Math.abs(-4))
println(“số “+Math.max(9,2)+” là số lớn”)
println(“Căn bậc 2 của 25=”+Math.sqrt(25.0))
println(“3 mũ 4 =”+Math.pow(3.0,4.0))
var goc=45
var rad=Math.PI*goc/180
println(“sin($goc)=”+Math.sin(rad))
println(“cos($goc)=”+Math.cos(rad))
println(“tan($goc)=”+Math.tan(rad))
println(“cotan($goc)=”+Math.cos(rad)/Math.sin(rad))
}
[/code]
Kết quả khi chạy chương trình:
Số PI=3.141592653589793 Giá trị tuyệt đối của -4=4 số 9 là số lớn Căn bậc 2 của 25=5.0 3 mũ 4 =81.0 sin(45)=0.7071067811865475 cos(45)=0.7071067811865476 tan(45)=0.9999999999999999 cotan(45)=1.0000000000000002 |
- Thư viện xử lý số ngẫu nhiên
Để xử lý số ngẫu nhiên ta dùng lớp Random nằm trong gói import java.util.Random
var rd=Random()
var x=rd.nextInt(n);
Trả về số ngẫu nhiên từ [0…n-1]
Ví dụ:
[0….100]=>rd.nextInt(101)
[-100 …100]=>-100+rd.nextInt(201)
[-100 … -50]=>-100+rd.nextInt(51)
rd.nextDouble() trả về số ngẫu nhiên [0…1)
Ví dụ viết Game đoán số theo mô tả:
Máy tính sẽ ra 1 số ngẫu nhiên [0..100], yêu cầu người chơi đoán số này, cho phép đoán sai 7 lần (quá 7 lần thì Game Over). Nếu đoán sai thì phải cho người chơi biết là số Người chơi đoán nhỏ hơn hay lớn hơn số của máy.
=>Sau khi kết thúc game (WIN or LOST)=>hỏi xem Người chơi có muốn chơi nữa không.
[code language=”groovy”]
import java.util.Random
/**
* Created by cafe on 28/05/2017.
*/
fun main(args: Array) {
while (true) {
choi()
println(“Chơi nữa không thím?(c/k):”)
val tl = readLine()
if (tl.equals(“k”, ignoreCase = true))
break
}
println(“Tạm biệt Thím!”)
}
fun choi()
{
val rd = Random()
val soMay = rd.nextInt(101)
println(“Máy đã ra 1 số [0…100] mời Thím đoán!”)
var soNguoi: Int=0
var soLanDoan = 0
do {
println(“Bạn đoán số gì?:”)
var s=readLine()
if(s!=null)
soNguoi = s.toInt()
soLanDoan++
println(“Thím đoán lần thứ ” + soLanDoan)
if (soNguoi == soMay) {
println(“Chúc mừng Thím! Thím đoán đúng, số máy =” + soMay)
break
}
if (soNguoi số thím”)
} else {
println(“Thím đoán sai! số máy <số thím")
}
if (soLanDoan == 7) {
println("Thím đã Cáo Phó, vì đoán 7 lần mà ko trúng!")
break
}
} while (soLanDoan <= 7)
}
[/code]
Kết quả khi chạy chương trình:
Máy đã ra 1 số [0…100] mời Thím đoán! Bạn đoán số gì?: 50 Thím đoán lần thứ 1 Thím đoán sai! số máy > số thím Bạn đoán số gì?: 75 Thím đoán lần thứ 2 Thím đoán sai! số máy <số thím Bạn đoán số gì?: 62 Thím đoán lần thứ 3 Chúc mừng Thím! Thím đoán đúng, số máy =62 Chơi nữa không thím?(c/k): k Tạm biệt Thím! |
- Thư viện xử lý Chuỗi
Ta thường sử dụng lớp StringBuilder (nằm trong kotlin.text) để xử lý chuỗi
- StringBuilder(): Mặc định tạo ra một đối tượng StringBuilder có thể lưu giữ được 16 ký tự
- StringBuilder(int capacity): Tạo ra một đối tượng StringBuilder có thể lưu giữ được capacity ký tự
- StringBuilder(String s): Tạo một đối tượng StringBuilder lấy thông tin từ chuỗi s
Các phương thức thường sử dụng:
- append() – nối chuỗi
- insert() – chèn chuỗi
- delete() – xóa chuỗi
- reverse() – đảo ngược chuỗi
Ví dụ:
[code language=”groovy”]
fun main(args: Array) {
var sb= StringBuilder(“Obama Putin”)
println(sb.toString())
sb.insert(5,”Kim Jong Un”)
println(sb.toString())
sb.append(” Donald Trump”)
println(sb.toString())
sb.reverse()
println(sb.toString())
}
[/code]
Kết quả khi chạy chương trình:
Obama Putin ObamaKim Jong Un Putin ObamaKim Jong Un Putin Donald Trump pmurT dlanoD nituP nU gnoJ miKamabO |
Đặc biệt khi nối chuỗi như đọc từ File, đọc từ internet với nội dung dài thì ta nên dùng StringBuilder để nối (append) thay vì dùng dấu +. Vì khi dùng dấu + tốc độ xử lý sẽ rất chậm.
Như vậy tới đây Tui đã hướng dẫn xong một số thư viện quan trọng thường dùng trong Kotlin, các bạn chú ý học kỹ và hiểu được nó thông qua các ví dụ ở trên nhé. Cần thành thạo các thư viện để có thể áp dụng tốt vào các dự án thực tế của mình.
Các bạn có thể tải source code bài này ở đây: http://www.mediafire.com/file/hkqhv8emwnrep4v/HocThuVienThuongDung.rar
Hẹn gặp các bạn ở những bài tiếp theo
Chúc các bạn thành công!
Trần Duy Thanh (http://ssoftinc.com/)