Tài liệu Lập trình Kotlin toàn tập - Trần Duy Thanh

Kotlin và Java là song kiếm hợp bích, để học tốt Kotlin thì theo Tui các bạn nên học tốt Java trước. Hai ngôn ngữ này sẽ tương hỗ cho nhau trong quá trình viết mã lệnh. Google đã công Kotlin trở thành ngôn ngữ chính thống cho việc triển khai các dự án Android, do đó tương lai nó có tiềm năng rất lớn.

Tài liệu Lập trình Kotlin toàn tập - Trần Duy Thanh trang 1

Trang 1

Tài liệu Lập trình Kotlin toàn tập - Trần Duy Thanh trang 2

Trang 2

Tài liệu Lập trình Kotlin toàn tập - Trần Duy Thanh trang 3

Trang 3

Tài liệu Lập trình Kotlin toàn tập - Trần Duy Thanh trang 4

Trang 4

Tài liệu Lập trình Kotlin toàn tập - Trần Duy Thanh trang 5

Trang 5

Tài liệu Lập trình Kotlin toàn tập - Trần Duy Thanh trang 6

Trang 6

Tài liệu Lập trình Kotlin toàn tập - Trần Duy Thanh trang 7

Trang 7

Tài liệu Lập trình Kotlin toàn tập - Trần Duy Thanh trang 8

Trang 8

Tài liệu Lập trình Kotlin toàn tập - Trần Duy Thanh trang 9

Trang 9

Tài liệu Lập trình Kotlin toàn tập - Trần Duy Thanh trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 271 trang Danh Thịnh 09/01/2024 7340
Bạn đang xem 10 trang mẫu của tài liệu "Tài liệu Lập trình Kotlin toàn tập - Trần Duy Thanh", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Tài liệu Lập trình Kotlin toàn tập - Trần Duy Thanh

Tài liệu Lập trình Kotlin toàn tập - Trần Duy Thanh
1 | P a g e 
Tài liệu 
Lập trình Kotlin toàn tập 
Thông tin tác giả: 
 Trần Duy Thanh (Profile https://duythanhcse.wordpress.com/contact/ ) 
 Blog chia sẻ kiến thức:  
 Website khóa học trực tuyến: https://communityuni.com/ 
 Phone: 0987773061 
 Email: duythanhcse@gmail.com 
TPHCM-2017 
2 | P a g e 
Mục Lục 
Lời giới thiệu ................................................................................................................................. 4 
Bài 1: Có nên học Kotlin? ........................................................................................................... 5 
Bài 2-Cài đặt công cụ lập trình Kotlin ..................................................................................... 10 
Bài 3-Tạo ứng dụng Kotlin đầu tiên......................................................................................... 20 
Bài 4-Cách xuất dữ liệu ra màn hình Kotlin ........................................................................... 27 
Bài 5 – Các cách ghi chú quan trọng khi lập trình Kotlin ..................................................... 29 
Bài 6-Kiểu dữ liệu và cách khai báo biến trong Kotlin ......................................................... 32 
Bài 7 – Ép kiểu dữ liệu trong Kotlin ........................................................................................ 35 
Bài 8 – Các toán tử quan trọng trong Kotlin ........................................................................... 38 
Bài 9- Nhập dữ liệu từ bàn phím với Kotlin ........................................................................... 47 
Bài 10- Cấu trúc điều khiển if else trong Kotlin..................................................................... 51 
Bài 11-Biểu thức when trong Kotlin ........................................................................................ 56 
Bài 12-Vòng lặp for trong Kotlin ............................................................................................. 62 
Bài 13-Vòng lặp while trong Kotlin......................................................................................... 69 
Bài 14-Vòng lặp do while trong Kotlin ................................................................................... 73 
Bài 15-Xử lý biệt lệ trong Kotlin.............................................................................................. 78 
Bài 16-Cách gỡ lỗi Kotlin bằng công cụ Debug..................................................................... 82 
Bài 17-Các thư viện quan trọng thường dùng trong Kotlin .................................................. 89 
Bài 18- Xử lý chuỗi trong Kotlin.............................................................................................. 98 
Bài 19- Xử lý mảng một chiều trong Kotlin .........................................................................106 
Bài 20- Xử lý mảng hai chiều trong Kotlin ...........................................................................111 
Bài 21-Collections trong Kotlin..............................................................................................115 
Bài 22-Lập trình hướng đối tượng trong Kotlin – phần 1 ...................................................121 
Bài 23-Lập trình hướng đối tượng trong Kotlin – phần 2 ...................................................129 
Bài 24-Lập trình hướng đối tượng trong Kotlin – phần 3 ...................................................139 
Bài 25-Lập trình hướng đối tượng trong Kotlin – phần 4 ...................................................146 
Bài 26-Lập trình hướng đối tượng trong Kotlin – phần 5 ...................................................150 
Bài 27-Alias và cơ chế gom rác tự động trong Kotlin-OOP phần 6 ..................................157 
Bài 28-Extensions Method trong Kotlin-OOP phần 7 .........................................................162 
Bài 29-Xử lý Text File trong Kotlin.......................................................................................167 
3 | P a g e 
Bài 30-Xử lý Serialize File trong Kotlin ...............................................................................172 
Bài 31-Xử lý XML File trong Kotlin .....................................................................................176 
Bài 32-Xử lý JSon trong Kotlin – Bài 1 ................................................................................182 
Bài 33-Xử lý JSon trong Kotlin – Bài 2 ................................................................................190 
Bài 34-Đọc JSon tỉ giá hối đoái của Ngân Hàng Đông Á trong Kotlin – Bài 3 ...............196 
Bài 35-Thiết kế giao diện trong Kotlin – phần 1 ..................................................................202 
Bài 36-Thiết kế giao diện trong Kotlin – phần 2 ..................................................................208 
Bài 37-Thiết kế giao diện trong Kotlin – phần 3 ..................................................................214 
Bài 38-Thiết kế giao diện trong Kotlin – phần 4 ..................................................................224 
Bài 39-Thiết kế giao diện trong Kotlin – phần 5 ..................................................................255 
Bài 40-Kết xuất Executable cho Kotlin [Kết thúc khóa học Kotlin] .................................263 
Tài liệu tham khảo ....................................................................................................................271 
4 | P a g e 
Lời giới thiệu 
Theo nhiều lời đề nghị của mọi người, Tui soạn thảo lại các bài lập trình Kotlin trên 
Blog https://duythanhcse.wordpress.com/kotlin/kotlin-co-ban-den-nang-cao/ thành Ebook 
để giúp các bạn dễ học tại máy. 
Kotlin và Java là song kiếm hợp bích, để học tốt Kotlin thì theo Tui các bạn nên học tốt 
Java trước. Hai ngôn ngữ này sẽ tương hỗ cho nhau trong quá trình viết mã lệnh. Google 
đã công Kotlin trở thành ngôn ngữ chính thống cho việc triển khai các dự án Android, do 
đó tương  ... e 
 public void actionPerformed(ActionEvent e) { 
 fileFactory=new JSonFileFactory(); 
if(fileChooser.showOpenDialog(null)==JFileChooser.APPROVE_OPTION
) 
 { 
sanPhamPanel.database=fileFactory.DocFile(fileChooser.getSelecte
dFile().getAbsolutePath()); 
 sanPhamPanel.showDataOnJTable(); 
 } 
 } 
 }); 
 mnuSystemSaveJSonFile.addActionListener(new 
ActionListener() { 
 @Override 
 public void actionPerformed(ActionEvent e) { 
 //xử lý lưu TextFile ở đây 
 fileFactory=new JSonFileFactory(); 
if(fileChooser.showSaveDialog(null)==JFileChooser.APPROVE_OPTION
) 
 { 
 boolean 
kq=fileFactory.LuuFile(sanPhamPanel.database,fileChooser.getSele
ctedFile().getAbsolutePath()); 
 if(kq==true) 
252 | P a g e 
 { 
 JOptionPane.showMessageDialog(null,"Lưu 
Json File thành công"); 
 } 
 else 
 { 
 JOptionPane.showMessageDialog(null,"Lưu 
JSon File thất bại"); 
 } 
 } 
 } 
 }); 
 } 
 public void createMenu() 
 { 
 mnuBar=new JMenuBar(); 
 setJMenuBar(mnuBar); 
 mnuSystem=new JMenu("Hệ thống"); 
 mnuBar.add(mnuSystem); 
 mnuSystemSave=new JMenu("Lưu file"); 
 mnuSystem.add(mnuSystemSave); 
 mnuSystemSaveTextFile=new JMenuItem("Text file"); 
 mnuSystemSave.add(mnuSystemSaveTextFile); 
 mnuSystemSave.addSeparator(); 
 mnuSystemSaveSerializeFile=new JMenuItem("Serialize 
file"); 
 mnuSystemSave.add(mnuSystemSaveSerializeFile); 
 mnuSystemSave.addSeparator(); 
 mnuSystemSaveXMLFile=new JMenuItem("XML file"); 
 mnuSystemSave.add(mnuSystemSaveXMLFile); 
 mnuSystemSave.addSeparator(); 
 mnuSystemSaveJSonFile=new JMenuItem("JSON file"); 
 mnuSystemSave.add(mnuSystemSaveJSonFile); 
 mnuSystem.addSeparator(); 
 mnuSystemOpen=new JMenu("Đọc File"); 
 mnuSystem.add(mnuSystemOpen); 
 mnuSystemOpenTextFile=new JMenuItem("Text file"); 
 mnuSystemOpen.add(mnuSystemOpenTextFile); 
 mnuSystemOpen.addSeparator(); 
 mnuSystemOpenSerializeFile=new JMenuItem("Serialize 
file"); 
 mnuSystemOpen.add(mnuSystemOpenSerializeFile); 
 mnuSystemOpen.addSeparator(); 
253 | P a g e 
 mnuSystemOpenXMLFile=new JMenuItem("XML file"); 
 mnuSystemOpen.add(mnuSystemOpenXMLFile); 
 mnuSystemOpen.addSeparator(); 
 mnuSystemOpenJSonFile=new JMenuItem("JSON file"); 
 mnuSystemOpen.add(mnuSystemOpenJSonFile); 
 mnuSystem.addSeparator(); 
 mnuSystemExit=new JMenuItem("Thoát"); 
 mnuSystem.add(mnuSystemExit); 
 } 
 private void createICon() { 
 mnuSystem.setIcon(new ImageIcon("hinh/system.png")); 
 mnuSystemSave.setIcon(new ImageIcon("hinh/save.png")); 
 mnuSystemSaveTextFile.setIcon(new 
ImageIcon("hinh/textfile.png")); 
 mnuSystemSaveSerializeFile.setIcon(new 
ImageIcon("hinh/serializefile.png")); 
 mnuSystemSaveXMLFile.setIcon(new 
ImageIcon("hinh/xmlfile.png")); 
 mnuSystemSaveJSonFile.setIcon(new 
ImageIcon("hinh/jsonfile.png")); 
 mnuSystemOpen.setIcon(new ImageIcon("hinh/open.png")); 
 mnuSystemOpenTextFile.setIcon(new 
ImageIcon("hinh/textfile.png")); 
 mnuSystemOpenSerializeFile.setIcon(new 
ImageIcon("hinh/serializefile.png")); 
 mnuSystemOpenXMLFile.setIcon(new 
ImageIcon("hinh/xmlfile.png")); 
 mnuSystemOpenJSonFile.setIcon(new 
ImageIcon("hinh/jsonfile.png")); 
 mnuSystemExit.setIcon(new ImageIcon("hinh/exit.png")); 
 } 
 public void showWindow() 
 { 
 setSize(500,500); 
 setLocationRelativeTo(null); 
 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
 setVisible(true); 
 } 
} 
So sánh định dạng dữ liệu kết quả 4 loại: 
254 | P a g e 
Như vậy Tui đã hướng dẫn xong toàn bộ phần mềm quản lý sản phẩm theo HƯỚNG 
ĐỐI TƯỢNG, thao tác với các control cơ bản và nâng của trong Kotlin. Kết xuất dữ liệu 
ra 4 loại tập tin, dễ dàng triệu gọi coding giữa Kotlin vs Java rất hay. Bài Sau Tui sẽ làm 
minh họa về JTree trong Kotlin, các bạn chú ý theo dõi nhé. 
Các bạn có thể tải source code bài này ở đây: 
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 ( 
255 | P a g e 
Bài 39-Thiết kế giao diện trong Kotlin – 
phần 5 
Chúc mừng các bạn đã vượt qua 4 cửa ải GUI trong Kotlin, đây là cửa ải cuối cùng Tui 
muốn các bạn vượt qua. Phần này Tui sẽ nói về JTree, một trong những Control phổ biến 
được dùng rất nhiều trong các dự án để hiển thị dữ liệu dạng phân cấp cây thư mục: 
Bài học này các bạn sẽ biết cách tạo 1 JTree, đưa được DefaultMutableTreeNode vào 
JTree. Đặc biệt sử dụng lập trình Hướng Đối Tượng để đưa dữ liệu lên Cây cối này, cũng 
như biết cách xử lý sự kiện khi người dùng nhấn vào từng Node trên Cây. 
Bạn tạo một Project có cấu trúc như sau: 
256 | P a g e 
Lớp Nhân Viên (NhanVien) có cấu trúc (Mã, tên): 
package communityuni.com.model 
/** 
 * Created by cafe on 04/06/2017. 
 */ 
class NhanVien { 
 var Ma:Int=0 
 var Ten:String="" 
 constructor() 
 constructor(Ma: Int, Ten: String) { 
 this.Ma = Ma 
 this.Ten = Ten 
 } 
 override fun toString(): String { 
 return Ten 
 } 
} 
Lớp Phòng Ban (PhongBan) có cấu trúc (mã, tên, danh sách nhân viên): 
package communityuni.com.model 
/** 
 * Created by cafe on 04/06/2017. 
 */ 
class PhongBan { 
 var Ma:Int=0 
 var Ten:String="" 
 var NhanViens:MutableList<NhanVien> = mutableListOf() 
 constructor() 
 constructor(Ma: Int, Ten: String) { 
 this.Ma = Ma 
 this.Ten = Ten 
 } 
 override fun toString(): String { 
 return Ten 
 } 
} 
Tiếp theo thiết kế màn hình NhanSuPanel.form như hình dưới: 
257 | P a g e 
Chỉnh pnMain có layout manager là BorderLayout, kéo JScrollPane vào phần Center 
=> sau đó kéo JTree vào bên trong JScrollPane. 
Nhớ chọn JTree rồi checked Custom Create để nó ra hàm createUIComponents() 
Sau đó Chỉnh sửa source code của NhanSuPanel, giả lập một số dữ liệu: 
package communityuni.com.ui; 
import communityuni.com.model.NhanVien; 
import communityuni.com.model.PhongBan; 
import javax.swing.*; 
import javax.swing.tree.DefaultMutableTreeNode; 
import java.util.ArrayList; 
import java.util.List; 
/** 
 * Created by cafe on 04/06/2017. 
 */ 
public class NhanSuPanel { 
 private JPanel pnMain; 
 private JTree treePhongBan; 
 DefaultMutableTreeNode root; 
 List<PhongBan>database=null; 
 private void loadSampleDatabaseToGUI() 
 { 
258 | P a g e 
 root=new 
DefaultMutableTreeNode(""); 
 treePhongBan=new JTree(root); 
 for (int i=0;i<database.size();i++) 
 { 
 PhongBan pb=database.get(i); 
 DefaultMutableTreeNode pbNode=new 
DefaultMutableTreeNode(pb); 
 root.add(pbNode); 
 for (int j=0;j<pb.getNhanViens().size();j++) 
 { 
 NhanVien nv=pb.getNhanViens().get(j); 
 DefaultMutableTreeNode nvNode=new 
DefaultMutableTreeNode(nv); 
 pbNode.add(nvNode); 
 } 
 } 
 } 
 private void createSampleDatabase() 
 { 
 database=new ArrayList<>(); 
 PhongBan pns=new PhongBan(1,"Phòng tổ chức hành chánh"); 
 PhongBan phc=new PhongBan(2,"Phòng Kế hoạch tài chính"); 
 PhongBan pkhcn=new PhongBan(3,"Phòng Khách hàng cá 
nhân"); 
 PhongBan pkhdn=new PhongBan(4,"Phòng Khách hàng doanh 
nghiệp"); 
database.add(pns);database.add(phc);database.add(pkhcn);database
.add(pkhdn); 
 pns.getNhanViens().add(new NhanVien(1,"Trần Thị Giải")); 
 pns.getNhanViens().add(new NhanVien(2,"Nguyễn Thị 
Thoát")); 
 pns.getNhanViens().add(new NhanVien(3,"Hồ Văn Hạnh")); 
 pns.getNhanViens().add(new NhanVien(4,"Đinh Thị Phúc")); 
 phc.getNhanViens().add(new NhanVien(5,"Trần Văn Yên")); 
 phc.getNhanViens().add(new NhanVien(6,"Hoàng thị 
Giấc")); 
 phc.getNhanViens().add(new NhanVien(7,"Nguyễn Ngọc 
Ngàn")); 
 phc.getNhanViens().add(new NhanVien(8,"Ma Văn Thu")); 
 } 
 public JPanel getPnMain() 
 { 
 return pnMain; 
259 | P a g e 
 } 
 private void createUIComponents() { 
 createSampleDatabase(); 
 loadSampleDatabaseToGUI(); 
 } 
} 
Chạy chương trình lên ta sẽ có giao diện như Tui cung cấp ở trên. 
Bây giờ để gán sự kiện cho JTree ta bấm chuột phải vào JTree rồi chọn Create Listener: 
Sau đó chọn TreeSelectionListener: 
260 | P a g e 
Chọn valueChanged trong màn hình Select Methods to Implement: 
Nhấn OK ta thấy sự kiện xuất hiện: 
public NhanSuPanel() { 
 treePhongBan.addTreeSelectionListener(new 
TreeSelectionListener() { 
 @Override 
 public void valueChanged(TreeSelectionEvent e) { 
 } 
 }); 
} 
261 | P a g e 
Bổ sung coding để kiểm tra Node nào được nhấn: 
public NhanSuPanel() { 
 treePhongBan.addTreeSelectionListener(new 
TreeSelectionListener() { 
 @Override 
 public void valueChanged(TreeSelectionEvent e) { 
 DefaultMutableTreeNode node= 
(DefaultMutableTreeNode) 
treePhongBan.getLastSelectedPathComponent(); 
 switch (node.getLevel()) 
 { 
 case 0: 
 JOptionPane.showMessageDialog(null,"Bạn nhấn 
Root="+node.getUserObject()); 
 break; 
 case 1: 
 PhongBan pb= (PhongBan) node.getUserObject(); 
 JOptionPane.showMessageDialog(null,pb.getTen()); 
 break; 
 case 2: 
 NhanVien nv= (NhanVien) node.getUserObject(); 
 JOptionPane.showMessageDialog(null,nv.getTen()); 
 break; 
 } 
 } 
 }); 
} 
Như vậy ta dùng treePhongBan.getLastSelectedPathComponent(); để biết được Node 
nào được chọn, dùng node.getLevel() để lấy chính xác cấp (thực ra là lấy đối tượng), ứng 
với mỗi level ta sẽ kiểm tra để lấy Đối tượng. 
262 | P a g e 
Như vậy Tui đã hướng dẫn xong cách dùng JTree trong Kotlin. các bạn nhớ kế hợp nó 
với JTable để hiển thị chi tiết dữ liệu. 
Các bạn có thể tải source code bài này ở đây: 
Hẹn gặp các bạn ở cuối cùng, bài 40 của khóa học Kotlin này. 
Chúc các bạn thành công! 
Trần Duy Thanh ( 
263 | P a g e 
Bài 40-Kết xuất Executable cho Kotlin [Kết 
thúc khóa học Kotlin] 
Chào các bạn! 
Chúng ta Say Goodbye ngôn ngữ lập trình Kotlin ở đây nhé, Tui phải Busy cho nhiều 
tasks khác. Toàn bộ các bài giảng về Kotlin Tui đã tổng hợp trong link 
https://duythanhcse.wordpress.com/kotlin/kotlin-co-ban-den-nang-cao/ các bạn vào đây 
học nhé. Ráng học cho tốt vì sắp tới Android Studio 3.0 ra đời nó sẽ đính kém lập trình 
Kotlin For Android, Tui gọi tắt là KfA. Nếu bạn học tới bài 40 này tức là đã đi trước nhiều 
người một số bước rồi. 
Theo Tui tham khảo từ nhiều nguồn, thì trong tương lai sẽ bùng nổ các dự án liên quan 
tới Machine Learning (Máy học). Có nhiều ngôn ngữ để lập trình cho Machine Learning 
chẳng hạn như Python, R, Matlab Nhiều Đại Học lớn trên thế giới hiện nay đã dùng 
ngôn ngữ lập trình Python vào giảng dạy kỹ thuật lập trình thay thế cho C++ và Java 
Trước đó Tui có viết được một số bài về Python 
https://duythanhcse.wordpress.com/python/ nhưng do Busy quá phải tạm Pause, Nếu các 
bạn còn trẻ, khỏe, nhanh nhẹn(xấu trai cũng được) thì hãy tiếp tục nghiên cứu Python, R 
để về sau có nhiều cơ hội tham gia các dự án Machine Learning. 
OK OK OK 
Giờ Tui kết thúc khóa học Kotlin với bài hướng dẫn cách Kết xuất Kotlin ra Jar file để 
người sử dụng có thể bấm 1 phát là chạy luôn mà không cần mở công cụ lập trình. 
IntelliZ IDEA cung cấp sẵn cho chúng ta Tool để làm điều này, vô cùng đơn giản đến 
mức chúng ta không thể nghĩ ra được. Cách làm chi tiết như sau: 
1)Bước 1: Chọn 1 Project nào đó, trong hướng dẫn này Tui chọn bài Quản Lý Sản 
Phẩm tại link https://duythanhcse.wordpress.com/2017/06/04/bai-38-thiet-ke-giao-dien-
trong-kotlin-phan-4/ 
Tui hướng dẫn thêm 1 cách tạo class có chứa hàm main để chạy: 
-Cách Cũ chúng ta đang làm (tập tin AppTestSanPhamUI.kt): 
264 | P a g e 
package communityuni.com.test 
import communityuni.com.ui.SanPhamUI 
/** 
 * Created by cafe on 04/06/2017. 
 */ 
fun main(args: Array) { 
 var gui:SanPhamUI= SanPhamUI("Trần Duy Thanh- Chương trình 
quản lý Sản phẩm") 
 gui.showWindow() 
} 
-Cách mới Ta có thể tạo thành một lớp theo cấu trúc dùng companion object và notation 
@JvmStatic: 
package communityuni.com.test 
import communityuni.com.ui.SanPhamUI 
/** 
 * Created by cafe on 06/06/2017. 
 */ 
class SanPhamApp { 
 companion object 
 { 
 @JvmStatic 
 fun main(args: Array) { 
 var gui: SanPhamUI = SanPhamUI("Trần Duy Thanh- 
Chương trình quản lý Sản phẩm") 
 gui.showWindow() 
 } 
 } 
} 
Vì sao lại phải biết thêm cách mới này để chạy hàm main? Bạn cứ làm nhiều đi rồi sẽ 
biết (thiên cơ bất khả lộ) 
2)Bước 2: Vào File/ chọn Project Structure: 
265 | P a g e 
3)Bước 3: Chọn artifacts/ bấm vào dấu + màu xanh / chọn JAR/ chọn From Modules 
with dependencies 
Lúc này màn hình yêu cầu chọn Main Class xuất hiện: 
266 | P a g e 
Ta bấm vào nút chọn Main Class: 
ở trên bạn chọn cái nào cũng được (2 cách tạo hàm main mà Tui trình bày ở trên) rồi 
nhấn nút OK 
Bấm OK tiếp: 
267 | P a g e 
Mục 1 là tên jar được tạo ra, mục 2 là nơi lưu trữ Jar này. Ta chọn OK để quay lại màn 
hình chính 
Tiến hành chạy lại phần mềm ta thấy nó tạo ra thư mục artifacts trong out folder: 
Vào bên trong artifacts có thư mục lưu file jar đó là HocGUIPhan4_jar: 
Vào bên trong thư mục này ta thấy file jar: 
268 | P a g e 
Bạn double click để chạy nó lên: 
Bạn thấy nó mất tiêu mấy cái hình rồi đúng không? vì Project này Tui hướng dẫn trước 
đó có hình ảnh, các hình ảnh được lưu trong thư mục hinh, bây giờ bạn chỉ cần sao chép 
thư mục đó vào ngay chỗ file jar này là OK: 
Bây giờ chạy lại file jar ta có kết quả: 
269 | P a g e 
Hình ảnh đã được hiển thị lên===> Ngon như cơm mẹ nấu đúng không các bạn 
Giờ thử vào Menu Hệ thống/ chọn mở File bất kỳ xem nó hiển thị được không nhé: 
270 | P a g e 
Như vậy là đã tải file thành công. 
Bạn đã hoàn thành các bước để tạo file Jar trong Intellij IDEA. 
Các bạn cố gắng học tốt các ngôn ngữ lập trình nhé, hãy tự đào tạo mình để có nhiều 
kiến thức về công nghệ. Tạo ra nhiều cơ hội trong tương lai để tìm tới những Công ty có 
cơ hội làm việc tốt hơn, lương bổng ổn định hơn. 
Để học lập trình tốt các bạn phải chịu khó cày, học ngày học đêm và bắt buộc phải 
Practice thật nhiều. 
Chúc các bạn thành công 
Trần Duy Thanh ( 
271 | P a g e 
Tài liệu tham khảo 
1.  
2. Kotlin in Action 
3. Fundamental Kotlin 
4. Programming Kotlin 
5. Kotlin for Android Developers 
6. Modern Web Development with Kotlin 
---HẾT--- 

File đính kèm:

  • pdftai_lieu_lap_trinh_kotlin_toan_tap_tran_duy_thanh.pdf