Kotlin vs Java - sự khác biệt giữa hai là gì?

Tác Giả: John Stephens
Ngày Sáng TạO: 24 Tháng MộT 2021
CậP NhậT Ngày Tháng: 1 Tháng BảY 2024
Anonim
Kotlin vs Java - sự khác biệt giữa hai là gì? - ỨNg DụNg
Kotlin vs Java - sự khác biệt giữa hai là gì? - ỨNg DụNg

NộI Dung


Java có thể vẫn là ngôn ngữ lập trình đầu tiên nảy ra trong đầu bạn khi bạn nghĩ về Android, nhưng bạn không nên để sử dụng Java để phát triển Android. Trên thực tế, Kotlin hiện là Google Googleưa thíchngôn ngữ chính thức cho Android!

Để tìm hiểu thêm về Java, hãy giới thiệu khóa học Java miễn phí tại Make Android Apps.

Ngày nay, Android Studio có kèm theo hỗ trợ Kotlin, do đó, việc tạo một dự án Android hiểu mã Kotlin cũng dễ như chọn một hộp kiểm trong trình hướng dẫn tạo dự án Android Studio. Hỗ trợ đã tăng lên cho tùy chọn quá giờ, đến mức quyết định này bây giờ chủ yếu được đưa ra để ưu tiên.

Nhưng nếu bạn thực hiện chuyển đổi từ Java sang Kotlin, chính xác thì bạn đang đạt được gì? Kotlin có những tính năng gì, mà Java không có, và ngược lại?


Trong bài viết này, chúng tôi sẽ xem xét tất cả những khác biệt chính giữa Kotlin và Java.

Kotlin vs Java, sau này cung cấp mã ngắn gọn hơn - không có findViewByIds

Nếu bạn so sánh một lớp Kotlin và một lớp Java đang thực hiện cùng một công việc, thì lớp Kotlin nói chung sẽ ngắn gọn hơn nhiều, nhưng có một khu vực đặc biệt là nơi Kotlin có thể giảm nghiêm trọng số lượng mã soạn sẵn mà bạn cần viết: findViewByIds.

Tiện ích mở rộng Android của Kotlin cho phép bạn nhập tham chiếu đến Chế độ xem vào tệp Hoạt động của mình, tại thời điểm đó, bạn sẽ có thể làm việc với Chế độ xem đó như thể đó là một phần của Hoạt động. Kết quả? Bạn không bao giờ phải viết một phương thức findViewById nữa!

Trước khi bạn có thể sử dụng các tiện ích mở rộng này, bạn sẽ cần thêm một plugin bổ sung vào tệp build.gradle cấp mô-đun của mình (áp dụng plugin: 'kotlin-android-extend') nhưng sau đó bạn đã sẵn sàng bắt đầu nhập Lượt xem, cho ví dụ nếu tệp Activity_main.xml của bạn chứa TextView với ID textView, thì bạn sẽ thêm phần sau vào Hoạt động của mình:


nhập kotlinx.android.sy merg.main.activity_main.textView

Sau đó, bạn có thể truy cập TextView này chỉ bằng ID của nó:

textView.setText ("Xin chào thế giới")

Đây là nhiều ngắn gọn hơn tương đương với Java:

TextView text = (TextView) findViewById (R.id.textView); text.setText ("Xin chào thế giới");

Kotlin là null an toàn theo mặc định

NullPulumExceptions là một nguồn thất vọng lớn cho các nhà phát triển Java. Java cho phép bạn gán null cho bất kỳ biến nào, nhưng nếu bạn cố gắng sử dụng một tham chiếu đối tượng có giá trị null, thì hãy tự chuẩn bị để gặp NullPulumException!

Cũng đọc: Giới thiệu về Kotiln cho Android

Trong Kotlin, tất cả các loại đều không có giá trị (không thể giữ giá trị null) theo mặc định. Nếu bạn cố gắng gán hoặc trả về null trong mã Kotlin của mình, thì nó sẽ thất bại trong thời gian biên dịch, vì vậy cả hai dòng sau sẽ không biên dịch:

tên val: String = null

vui vẻ getName (): String = null

nếu bạn có thật không muốn gán một giá trị null cho một biến trong Kotlin, thì bạn sẽ cần đánh dấu rõ ràng biến đó là nullable, bằng cách thêm một dấu hỏi sau kiểu:

số val: Int? = không

Điều này khiến cho hầu như không thể gặp NullPulumExceptions trong Kotlin - thực tế, nếu bạn gặp phải ngoại lệ này, thì rất có thể đó là vì bạn đã yêu cầu Kotlin ném một cái, hoặc NullPulumException có nguồn gốc từ mã Java bên ngoài.

Chức năng mở rộng

Kotlin cung cấp cho các nhà phát triển khả năng mở rộng một lớp với chức năng mới, rất lý tưởng nếu có một lớp mà bạn luôn cảm thấy thiếu một phương thức quan trọng!

Các hàm ‘tiện ích mở rộng này có sẵn trong Java, mặc dù chúng có sẵn bằng các ngôn ngữ lập trình khác mà bạn có thể sử dụng để phát triển Android, chẳng hạn như C #.

Đọc tiếp: Hướng dẫn Java cho người mới bắt đầu

Bạn tạo một hàm mở rộng bằng cách thêm tiền tố vào tên của lớp mà bạn muốn mở rộng (chẳng hạn như ‘Chuỗi,) thành tên của hàm mà bạn tạo ra (‘ styleString, ví dụ):

fun String.styleString (): String {// Tạo kiểu cho chuỗi và sau đó trả về //}

Sau đó, bạn có thể gọi hàm này trong các trường hợp của lớp mở rộng, thông qua. ký hiệu, như thể nó là một phần của lớp đó:

myString.styleString ()

Quân đoàn là công dân hạng nhất

Bất cứ khi nào bạn bắt đầu một hoạt động chạy dài, chẳng hạn như I / O mạng hoặc công việc đòi hỏi nhiều CPU, luồng cuộc gọi sẽ bị chặn cho đến khi hoạt động hoàn tất. Vì Android là một luồng theo mặc định, ngay sau khi bạn chặn luồng chính, ứng dụng UI UI của bạn sẽ bị đóng băng, và nó sẽ không phản hồi cho đến khi hoàn tất thao tác.

Trong Java, giải pháp truyền thống là tạo ra một luồng nền trong đó bạn có thể thực hiện công việc chuyên sâu hoặc lâu dài này, nhưng việc quản lý nhiều luồng có thể dẫn đến mã phức tạp, dễ bị lỗi và tạo một luồng mới là một hoạt động tốn kém.

Trong khi bạn có thể tạo các chủ đề bổ sung trong Kotlin, bạn cũng có thể sử dụng coroutines. Các quân đoàn thực hiện các nhiệm vụ dài hạn và chuyên sâu bằng cách tạm dừng thực thi tại một điểm nhất định mà không chặn luồng, và sau đó tiếp tục chức năng này tại một điểm sau đó, có thể trên một luồng khác. Điều này cho phép bạn tạo mã không đồng bộ không chặn nhìn đồng bộ, và do đó rõ ràng hơn, súc tích và dễ đọc hơn. Các coroutines cũng không có chồng, vì vậy chúng có mức sử dụng bộ nhớ thấp hơn so với các luồng và chúng mở ra cánh cửa cho các kiểu lập trình không chặn không đồng bộ bổ sung, như async / await.

Không có ngoại lệ được kiểm tra

Kotlin không có kiểm tra ngoại lệ, vì vậy bạn không cần phải nắm bắt hoặc khai báo bất kỳ ngoại lệ nào.

Việc đây có phải là thứ thu hút bạn đến với Kotlin hay khiến bạn muốn gắn bó với Java sẽ tùy thuộc vào ý kiến ​​của bạn về các ngoại lệ được kiểm tra, vì đây là một tính năng phân chia cộng đồng nhà phát triển. Nếu bạn chán việc thử / bắt các khối làm lộn xộn mã Java của mình, thì bạn sẽ hài lòng với thiếu sót này, tuy nhiên nếu bạn thấy các ngoại lệ được kiểm tra đó khuyến khích bạn nghĩ về việc khôi phục lỗi và cuối cùng thúc đẩy bạn tạo ra mạnh mẽ hơn mã, sau đó bạn có nhiều khả năng xem đây là một khu vực nơi Java có lợi thế hơn so với Kotlin.

Hỗ trợ bản địa cho đoàn

Kotlin, không giống như Java, hỗ trợ thành phần của chế độ ăn kiêng trên mẫu thiết kế kế thừa, thông qua ủy quyền hạng nhất (đôi khi được gọi là ủy quyền ngầm). Phân quyền là nơi một đối tượng nhận ủy thác các hoạt động cho một đối tượng ủy nhiệm thứ hai, là một đối tượng trợ giúp với bối cảnh ban đầu.

Phái đoàn lớp Kotlin sườn là một thay thế cho thừa kế cho phép sử dụng nhiều kế thừa. Trong khi đó, các thuộc tính được ủy quyền của Kotlin, giúp ngăn chặn việc sao chép mã, ví dụ nếu bạn cần sử dụng lại cùng một mã cho nhiều thuộc tính thì getters và setters, sau đó bạn có thể trích xuất mã này vào một thuộc tính được ủy quyền. Đại biểu thuộc tính cần xác định hàm toán tử getValue và, tùy chọn, toán tử setValue:

class Delegate {toán tử vui getValue (...) ... ... ...} toán tử vui setValue (...) ... ... ...}}

Sau đó, khi bạn tạo một thuộc tính, bạn có thể khai báo rằng các hàm getter và setter cho thuộc tính cụ thể này được xử lý bởi một lớp khác:

class MyClass {var property: String by Delegate ()}

Các lớp dữ liệu

Nó không khác thường đối với một dự án có nhiều lớp không làm gì ngoài việc giữ dữ liệu. Trong Java, bạn sẽ thấy mình viết rất nhiều mã soạn sẵn cho các lớp này, mặc dù bản thân các lớp có rất ít chức năng. Thông thường, bạn sẽ cần xác định hàm tạo, các trường để lưu trữ dữ liệu, hàm getter và setter cho từng trường, cộng với các hàm hashCode (), equals () và toString ().

Trong Kotlin, nếu bạn bao gồm từ khóa ‘dữ liệu trong định nghĩa lớp của bạn, thì trình biên dịch sẽ thực hiện tất cả công việc này cho bạn, bao gồm cả việc tạo ra tất cả các getters và setters cần thiết:

lớp dữ liệu Ngày (var tháng: String, var day: Int)

Diễn viên thông minh

Trong Java, bạn thường phải kiểm tra loại và sau đó truyền một đối tượng trong các tình huống mà nó đã rõ ràng rằng đối tượng có thể được truyền.

Các diễn viên thông minh của Kotlin có thể xử lý các phôi thừa này cho bạn, vì vậy bạn không cần phải đưa ra một tuyên bố nếu bạn đã kiểm tra nó với nhà điều hành của Kotlin. Ví dụ, trình biên dịch biết rằng các cast sau là an toàn:

if (xin chào là Chuỗi) {printString (xin chào)}

Hỗ trợ cho các nhà xây dựng

Không giống như Java, một lớp Kotlin có thể có một hàm tạo chính và một hoặc nhiều hàm tạo thứ cấp mà bạn tạo bằng cách đưa chúng vào khai báo lớp của bạn:

lớp Trình xây dựng MainActivity (FirstName: String) {}

Không hỗ trợ cho chuyển đổi mở rộng ngầm

Kotlin không hỗ trợ ẩn mở rộng chuyển đổi cho các số, vì vậy các loại nhỏ hơn không được chuyển đổi thành các loại lớn hơn. Trong Kotlin, nếu bạn muốn gán giá trị loại Byte cho biến Int, thì bạn sẽ cần thực hiện chuyển đổi rõ ràng, trong khi Java có hỗ trợ cho chuyển đổi ngầm định.

Thư viện xử lý chú thích với Kotlin

Kotlin hỗ trợ tất cả các thư viện và khung công tác Java hiện có, bao gồm các khung nâng cao dựa trên xử lý chú thích, mặc dù một số thư viện Java đã cung cấp các phần mở rộng của Kotlin, chẳng hạn như RxKotlin.

Nếu bạn muốn sử dụng một thư viện Java dựa trên xử lý chú thích, thì việc thêm nó vào dự án Kotlin của bạn sẽ hơi khác vì bạn sẽ cần chỉ định phụ thuộc bằng cách sử dụng kotlin-kapt plugin và sau đó sử dụng công cụ xử lý chú thích Kotlin (kapt) thay vì annotationProcessor. Ví dụ:

// Áp dụng plugin // áp dụng plugin: kotlin-kapt // Thêm các phụ thuộc tương ứng bằng cách sử dụng cấu hình kapt // phụ thuộc {kapt "com.google.dagger: dagger-biên dịch: $ dagger-version" ... ... ...}

Khả năng hoán đổi với Java

Khi tranh luận về việc nên sử dụng Kotlin hay Java để phát triển Android, bạn nên lưu ý rằng có một tùy chọn thứ ba: sử dụng cả hai. Mặc dù có tất cả sự khác biệt giữa hai ngôn ngữ, Java và Kotlin có thể tương tác 100%. Bạn có thể gọi mã Kotlin từ Java và bạn có thể gọi mã Java từ Kotlin, do đó, có thể có các lớp Kotlin và Java song song trong cùng một dự án và mọi thứ vẫn sẽ được biên dịch.

Tính linh hoạt này để di chuyển giữa hai ngôn ngữ rất hữu ích khi bạn bắt đầu với Kotlin vì nó cho phép bạn giới thiệu Kotlin vào một dự án hiện có dần dần, nhưng bạn cũng có thể thích sử dụng cả hai ngôn ngữ trên cơ sở vĩnh viễn. Ví dụ, có thể có một số tính năng nhất định mà bạn thích viết bằng Kotlin và một số tính năng nhất định mà bạn thấy dễ viết hơn trong Java. Do cả Kotlin và Java đều biên dịch thành mã byte, nên người dùng cuối của bạn đã giành chiến thắng có thể cho biết mã Java của bạn kết thúc ở đâu và mã Kotlin bắt đầu, do đó, không có lý do nào khiến bạn có thể phát hành một ứng dụng bao gồm Java Mã Kotlin.

Nếu bạn muốn tự mình dùng thử Kotlin, thì miễn là bạn đã cài đặt Android Studio 3.0 Preview hoặc cao hơn, có một vài cách bạn có thể bắt đầu:

  • Tạo một dự án Android Studio mới. Phương pháp đơn giản nhất là tạo một dự án mới và chọn hộp kiểm ‘Bao gồm hỗ trợ Kotlin từ trình hướng dẫn tạo dự án.

  • Thêm một lớp Kotlin vào một thư mục hiện có. Điều khiển bấm vào thư mục trong câu hỏi, sau đó chọn ‘Tệp> Mới> Tệp / Lớp của Kotlin. Android Android Studio sẽ hiển thị một biểu ngữ yêu cầu bạn định cấu hình dự án của mình để hỗ trợ Kotlin; nhấp vào liên kết ‘Cấu hình, và làm theo hướng dẫn trên màn hình.

  • Chuyển đổi các tệp Java hiện có sang Kotlin. Bạn có thể chạy bất kỳ tệp Java nào thông qua trình chuyển đổi Kotlin, bằng cách bấm Điều khiển tệp và chọn ‘Code> Chuyển đổi tệp Java thành tệp Kotlin.

Gói lại

Như bạn có thể thấy có rất nhiều lý do tốt để thích Kotlin hơn Java, tuy nhiên có một số lĩnh vực mà Java chiếm thế thượng phong. Có lẽ đáng chú ý nhất: nhiều nhà phát triển Android đơn giản là quen thuộc hơn với Java vào thời điểm này. Có khả năng cuộc tranh luận giữa Kotlin và Java đã thắng giải quyết bất cứ lúc nào, với cả hai đều có giá trị riêng. Vì vậy, bạn sẽ thực hiện chuyển đổi sang Kotlin hay bạn có cảm thấy rằng Java vẫn là lựa chọn tốt nhất để phát triển Android?

Đọc tiếp: Giới thiệu về cú pháp Java để phát triển Android

Đổi điện thoại có thể là một nỗi đau hoàn toàn. Bạn không chỉ phải đảm bảo tất cả dữ liệu của mình được ao lưu mà còn phải tìm cách chuyển tài kh...

1. Loại Tạo một điểm khôi phục trong trường tìm kiếm Cortana trên thanh tác vụ. 2. Chọn Tạo một điểm khôi phục (Bảng điều khiển) kết quả....

KhuyếN Khích