Trong bài viết trước mình đã gửi tới các bạn khái niệm Kotlin là gì rồi, phần tiếp theo này mình sẽ trình bày tiếp đặc điểm của Kotlin các bạn hãy theo dõi nhé
Có 2 từ khóa khai báo biến trong Kotlin là var và val
val a: Int = 1
val b = 1 // `Int` type is inferred
val c: Int // Type required when no initializer is provided
c = 1 // definite assignment
var x = 5 // `Int` type is inferred
x += 1
Null Safety
Một trong những cạm bẫy phổ biến trong các ngôn ngữ lập trình, bao gồm cả Java là cho phép 1 thành phần nào đó được Null. Nếu không chắc chắn thành phần đó được phép Null hay không sẽ rất dễ xảy ra lỗi không lường trước được, gây nguy hiểm cho hệ thống của bạn. Cụ thể, trong java sẽ gây ra 1 exception là NullPoiterException hoặc viết ngắn gọi là NPE.
Kotlin nhằm mục đích xóa bỏ NullPoiterException trong code của chúng ta. Ngay khi khai báo biến với Kotlin, bạn đã phải chỉ rõ biến đó có được phép Null hay không. Có 2 trường hợp được phép đó là : không thể Null và có thể Null
Khai báo 1 biến cho phép Null
var b: String? = "abc" // có thêm dấu ? sau kiểu của biến
b = null // compilation ok
val l = b.length // not safe
Khai báo 1 biến không được phép Null
var a: String = "abc"
a = null // compilation error
val l = a.length // safe
Chúng ta có thể thấy Kotlin đã khắc phục được expcetion NPE trong Java. Các biến cho phép Null hay không được phép Null đã được xác định ngay trong quá trình khai báo biến, các IDE sẽ giúp chúng ta phát hiện ra lỗi ngay khi compile. Việc phát hiện ra lỗi sớm khi compile sẽ tốt hơn so với khi runtime. Nó giúp hệ thống của chúng ta an toàn hơn.
String trong kotlin có thể chứa các biểu thức template, tức là những kết quả trả về hoặc biến có thể được nối vào trong 1 String. Một biểu thức template bắt đầu với ($) và tên :
val apples = 4
valbananas = 3
println(“I have $apples apples.”)
println(“I have $apples apples and ” + (apples + bananas) + “ fruits.”)
println(“I have $apples apples and ${apples + bananas} “ fruits.”)
Mặc định class trong Kotlin đều là final (tức là không được phép kế thừa)
open class Base {
open fun v() {}
fun nv() {}
}
class Derived() : Base() {
override fun v() {}
}
Trong class final (tức là không có từ khóa “open”) thì việc khai báo các hàm, thuộc tính open bị cấm Ở 1 lớp con khác, hàm được đánh dấu là override thì chính nó là open (lại được kế thừa từ lớp khác), nếu muốn chống override thì lại sử dụng từ khóa final
open class AnotherDerived() : Base() {
final override fun v() {}
}
Trong interface, các member mặc định là “open”
interface B {
fun f() { print("B") } // interface members are 'open' by default
fun b() { print("b") }
}
Kotlin implement interface :
class C() : A(), B {
// The compiler requires f() to be overridden:
override fun f() {
super<A>.f() // call to A.f()
super<B>.f() // call to B.f()
}
}
Có 4 loại Visivility Modifiers trong Kotlin : private, protected, internal, và public
Kotlin cho phép thay đổi vị trí tham số trong hàm
fun main(args : Array<String>) {
greet(firstName = "Frasensco", lastName = "Merini")
greet(lastName = "John", firstName = "Stamos")
greet("Borat", "Ismail")
greet("Crystal", lastName = "Stamos")
call("Xavier", age = 20, location = "Portugal")
}
fun greet(firstName : String, lastName : String){
println("Good morning $firstName $lastName")
}
fun call(name : String, location : String, age : Int){
println("Call $name who lives at $location and he is $age old")
}
Out put :
Good morning Frasensco Merini
Good morning Stamos John
Good morning Borat Ismail
Good morning Crystal Stamos
Call Xavier who lives at Portugal and he is 20 old
Unpublished comment
Viết câu trả lời