继续上一篇文章的示例分析
参考链接是:https://try.kotl.in
条件表达式
/**
* `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可以检查某个数是否在一个范围里,或者不在一个范围里;检查一个对象是否在一个集合里,不在一个集合里!
代码中有几个点第一次出现:
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功能强大!
以上只是通过代码分析,自己的理解和代码测试来学习的,如果有不正确地地方,非常感谢能指出来,先谢过!