Kotlin學習筆記(二)——示例篇二
示例一
條件表示式
/**
* `if` is an expression, i.e. it returns a value.
* Therefore there is no ternary operator (condition ? then : else),
* because ordinary `if` works fine in this role.
* See http://kotlinlang.org/docs/reference/control-flow.html#if-expression
*/
fun main(args: Array<String>) {
println(max(Integer.parseInt(args[0 ]), Integer.parseInt(args[1])))
}
fun max(a: Int, b: Int) = if (a > b) a else b
分析:以上程式碼最主要的是是max函式,這個函式表示式是一個很簡練的寫法,上一篇文章中提到過,只是將函式要返回的型別用賦值表示式表達了,Java類似的方法是這樣的
fun max(a:Int,b:Int) :Int{
if(a>b)return a
else return b
}
以上程式碼只加了個if-else語句
示例二
檢查是否可以為null
/**
* A reference must be explicitly marked as nullable to be able hold a null.
* See http://kotlinlang.org/docs/reference/null-safety.html#null-safety
*/
package multiplier
// Return null if str does not hold a number
fun parseInt(str: String): Int? {
try {
return Integer.parseInt(str)
} catch (e: NumberFormatException) {
println("One of the arguments isn't Int")
}
return null
}
fun main(args: Array<String>) {
if (args.size < 2) {
println("No number supplied");
} else {
val x = parseInt(args[0])
val y = parseInt(args[1])
// We cannot say 'x * y' now because they may hold nulls
if (x != null && y != null) {
print(x * y) // Now we can
} else {
println("One of the arguments is null")
}
}
}
分析:以上程式碼主要的是函式parseInt();,如果字串str能轉換成Int,則返回正數,否則返回null,函式parseInt()的返回型別是 Int?
,這就是說如果是Int,就是Int,否則就是null,該函式接收null,用問好?
表示該引用可以接收null
示例三
用表示式檢查型別
/**
* The `is` operator checks if an expression is an instance of a type and more.
* If we is-checked an immutable local variable or property, there's no need
* to cast it explicitly to the is-checked type.
* See this pages for details:
* http://kotlinlang.org/docs/reference/classes.html#classes-and-inheritance
* http://kotlinlang.org/docs/reference/typecasts.html#smart-casts
*/
fun main(args: Array<String>) {
println(getStringLength("aaa"))
println(getStringLength(1))
}
fun getStringLength(obj: Any): Int? {
if (obj is String)
return obj.length // no cast to String is needed
return null
}
分析:上述程式碼中,主要的方法是getStringLength(),如果任意型別Any的變數obj是String型別,則返回該字串的長度,否則返回null!該函式類似Java中的方法
int getStringLength(Object str){
if (str instanceof String){
return ((String)str).length();
}
return 0;
}
在kotlin中, 使用is 來判斷是否是某一型別,Java中用instanceof來判斷
示例四
迴圈語句while和do..while的使用方法
/**
* `while` and `do..while` work as usual.
* See http://kotlinlang.org/docs/reference/control-flow.html#while-loops
*/
fun main(args: Array<String>) {
var i = 0
while (i < args.size)
println(args[i++])
}
分析:以上程式碼,使用了while迴圈,進行陣列遍歷,並且i在遍歷的過程中進行自增長!
示例五
使用for迴圈進行遍歷
/**
* For loop iterates through anything that provides an iterator.
* See http://kotlinlang.org/docs/reference/control-flow.html#for-loops
*/
fun main(args: Array<String>) {
for (arg in args)
println(arg)
// or
println()
for (i in args.indices)
println(args[i])
}
分析:在Java中使用增強for迴圈的格式是for(Class class: Classes)
,而在kotlin中,使用for迴圈的格式是:`for(class in classes),不需要定義變數,通過使用in關鍵字,即指定了變數的型別和範圍!
示例六
以下程式碼主要用於檢查一個數是否在某一個範圍內,或者不在某一個範圍內,還可以檢查某一個物件是否在一個集合內!
/**
* Check if a number lies within a range.
* Check if a number is out of range.
* Check if a collection contains an object.
* See http://kotlinlang.org/docs/reference/ranges.html#ranges
*/
fun main(args: Array<String>) {
val x = Integer.parseInt(args[0])
//Check if a number lies within a range:
val y = 10
if (x in 1..y - 1)
println("OK")
//Iterate over a range:
for (a in 1..5)
print("${a} ")
//Check if a number is out of range:
println()
val array = arrayListOf<String>()
array.add("aaa")
array.add("bbb")
array.add("ccc")
if (x !in 0..array.size - 1)
println("Out: array has only ${array.size} elements. x = ${x}")
//Check if a collection contains an object:
if ("aaa" in array) // collection.contains(obj) is called
println("Yes: array contains aaa")
if ("ddd" in array) // collection.contains(obj) is called
println("Yes: array contains ddd")
else
println("No: array doesn't contains ddd")
}
分析:以上程式碼主要是對in
的使用,in可以檢查某個數是否在一個範圍裡,或者不在一個範圍裡;檢查一個物件是否在一個集合裡,不在一個集合裡!
程式碼中有幾個點第一次出現:
- arrayListOf的第一次使用
在Java中,常用的ArrayList,在kotlin中,arrayListOf作用比較像,先看一下列表的建立和新增程式碼:
fun arrayListTest(){
var arrays=arrayListOf<String>()
arrays.add("ddd")
arrays.add("bbbb")
arrays.add("addd")
arrays.add("ccc")
}
看一下arrayListOf的函式說明:
**public fun arrayListOf(vararg values: T): ArrayList defined in kotlin
Returns a new ArrayList with the given elements.**,這下就明白arrayListOf的作用了,就是返回一個ArrayList集合元素
如何遍歷一個集合呢?
fun arrayListTest(){
var arrays=arrayListOf<String>()
arrays.add("ddd")
arrays.add("bbbb")
arrays.add("addd")
arrays.add("ccc")
for(s in arrays){
println(s)
}
}
判斷某個元素是不是在集合中,使用in即可:
fun arrayListTest(){
var arrays=arrayListOf<String>()
arrays.add("ddd")
arrays.add("bbbb")
arrays.add("addd")
arrays.add("ccc")
if("ccc" in arrays){
println("在集合裡")
}
if("ddddddd" in arrays){
println("不在集合裡")
}
}
2 設定某個數值範圍的方法使用
如何寫從0到10的所有數呢?
fun rang(size : Int){
for(b in 0..size){
println(b)
}
}
分析:數字0到10,可以這麼寫 0..10
,中間加兩個點即可
示例七
when
/**
* See http://kotlinlang.org/docs/reference/control-flow.html#when-expression
*/
fun main(args: Array<String>) {
cases("Hello")
cases(1)
cases(System.currentTimeMillis())
cases(MyClass())
cases("hello")
}
fun cases(obj: Any) {
when (obj) {
1 -> println("One")
"Hello" -> println("Greeting")
is Long -> println("Long")
!is String -> println("Not a string")
else -> println("Unknown")
}
}
class MyClass() {
}
分析:以上程式碼主要部分是cases()函式,該函式使用when作為條件語句,支援整數,字串,long,等判斷,有點類似Java中的switch,但是比switch功能強大!
以上只是通過程式碼分析,自己的理解和程式碼測試來學習的,如果有不正確地地方,非常感謝能指出來,先謝過!