Android CommunityAndroid知识Android开发

Kotlin简单入门

2017-05-20  本文已影响236人  大批

:)

**V E _**

我只是搬运工,对搬运工不能有太高的要求。 -_-!

Hello Kotlin

fun main(args: Array<String>) {
    println("Hello Kotlin.")
}

$%%%%%%%%%%%%%%%%%%%%%%%%%%%
下面高能预警~~ 各种官网语法例子在路上
======================> 传送门
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%


入门

1.包名
package my.demo
import java.util.*
package com.suse.dapi
fun main(args: Array<String>) {
    println("Hello Kotlin.")
}
2.基本数据类型(这里需要注意哈~~ kotlin中所有的都是对象包括int之类的基本类型,so这里说的基本类型其实也是对象哈)

package com.suse.dapi.demo

fun main(args: Array<String>) {

    println("Hello Kotlin.")

    val mDouble: Double = 12345.0
    val mFloat: Float = 12323f
    var mLong: Long = 123
    var mInt: Int = 1232

    var mInt2 = 123213 //省略了变量类型

    mDouble = 123.0  //尝试修改 val 申明的变量
    mLong = 12323

    mInt = mDouble.toInt() // double ==> int
    mLong = mInt.toLong() // int ==> long

}
  var mChar: Char = 'P'
    mChar == 1 // 错误
    mChar == 'a'
    mChar.toByte()
    mChar.toInt()
    var intArray = arrayOf(1,2,3)  //这里返回的实际上是Array对象
    println(intArray[0])

    var intArray: Array<Int> = arrayOf(1,2,3)
    println(intArray[0])
arrayOf源码
    var name: String = "dapi"
    var number = "123345666"
    var content = """

            这里面可以写各种东西
            var name = ""  .....
            这个就类似 html 里面的 <pre></pre>标签
            $name   ====>    ${'$'} // 这个是在字符串里面输出 $
    """

    var templ = "i am $name, my number is ${ name + number}" //字符串模板
3.流程控制
    var number1 = 0x0033
    var number2 = 0x0022
    var flag: Boolean = false
    // 一般的 if
    if(number1 > number2){
        flag = true
    }else{
        flag = false
    }


    // 有返回值的 if
    flag = if (number1 > number2){
        println(".....")
        true // 吧返回值放到最后就可以了
    }else{
        println("-----")
        false
    }

    // 表达式的 if
    flag = if (number1 > number2) true else false
/**
     *
     * 以前的 for (int i = 0;i < 10;i++) 循环已经不行了
     * for 专门用来迭代 有 iterator 方法的集合
     *
     */
    var numbers = arrayOf(1,2,3,4,5)
    for (item in numbers){
        //..
    }
    for (item in numbers.iterator()){
        //..
    }
    /**
     *
     * 这里是的index 是下标  0 ,1 ,2, 3, 4,...
     * 查看源码发现 indices 其实返回的就是一个数组 Array 实际上也是使用的 iterator
     *
     */
    for (index in numbers.indices){
        // ..
    }

    /**
     * 这里 (index,value) 其实就是下标 和 对应的值
     * 查看源码发现 withIndex 其实返回的就是一个数组 Array 实际上也是使用的 iterator
     *
     */
    for((index,value) in  numbers.withIndex()){
        // ...
    }
while (x > 0) {
    x--
}

do {
    val y = retrieveData()
} while (y != null) // y is visible here!

    var number3 = 100

    when(number3){
        in 1..101 -> println("1")
        in 10..102 -> println("2")
        else -> println("3")
    }
    // 结果是 3

    when{
        number3 in 1..102 -> {
            //...
        }
        number3 == 100 -> {
            //...
        }
        else -> {
            //...
        }
    }
    while(number3 < 200){
        if(number3 % 2 == 0){
            continue
        }
        if(number3 == 150){
            break
        }
        number3++
    }

    //添加标签的情况
    tagert@
    while(number3 < 200){
        while(number3 < 150){
            break@tagert
        }
        number3++
    }

类和对象(终于可以谈对象了~~)

/**
 * 这样就定义了一个类了
 */
class MyArray{
    
}

class MyArray{

    var items: Array<String> = arrayOf("name1","name2","name3")
    var total =  items.size

}
class MyArray{

    var items: Array<String> = arrayOf("name1","name2","name3")
    var total =  items.size


    public operator fun iterator(): Iterator<String>{
        return items.iterator()
    }

}
    var myArray = MyArray()
    for (item in myArray){
        println(item)
    } // 这样写是完全可以的哈
class MyArray public constructor(names: Array<String>){

    var items: Array<String> = arrayOf("name1","name2","name3")
    var total =  items.size

    /**
     * 主构造就是申明在 类的定义后面...  有点智障啊~~
     * 主构造的参数是在 init 里面访问的~~ 也只有这里访问
     * 这个init 方法就像静态代码块一样 放在前面的先执行  这个也是有点智障啊~~
     */
    init {
        items = names
    }

    public operator fun iterator(): Iterator<String>{
        return items.iterator()
    }

}
class MyArray public constructor(var items: Array<String>,var total: Int){

    var orther: String = "tag" //这里一样可以写其他的属性

    public operator fun iterator(): Iterator<String>{
        return items.iterator()
    }

}
class MyArray {

    var items: Array<String> = arrayOf("name1","name2","name3")
    var total =  items.size
    
    constructor(name: Array<String>){
        items = name
    }

    public operator fun iterator(): Iterator<String>{
        return items.iterator()
    }
}
class MyArray constructor(size: Int){

    var items: Array<String> = arrayOf("name1","name2","name3")
    var total =  items.size

    init {
        total = size
    }

    constructor(name: Array<String>,size_: Int) : this(size_){
        items = name
    }

    public operator fun iterator(): Iterator<String>{
        return items.iterator()
    }

}
var myArray = MyArray()
open class MyArray {
    var size: Int = 0
}

/**
 * 继承的时候需要调用父类的构造方法   这里是默认的构造方法
 */
class MyArray2 : MyArray() {
}
open class MyArray constructor(size: Int){
    var size: Int = 0
}

/**
 * 继承的时候需要调用父类的构造方法
 */
class MyArray2 constructor(size: Int): MyArray(size) {
}
/**
 *
 * 这里是不会生成默认的构造方法的~~
 *
 */
open class MyArray {
    var size: Int = 0
    constructor(size: Int){
    }
}

/**
 * 继承的时候需要调用父类的构造方法 这里就不能调用父类的无参数构造了
 */
class MyArray2 constructor(size: Int): MyArray(size) {
}

/**
 *
 * 这里是不会生成默认的构造方法的~~
 *
 */
open class MyArray {

    var size: Int = 0

    constructor(size: Int){

    }

}

/**
 * 继承的时候需要调用父类的构造方法 使用 super
 */
class MyArray2 : MyArray{

    constructor(size: Int) : super(size)

}
/**
 *
 * 这里是不会生成默认的构造方法的~~
 *
 */
open class MyArray {
    var size: Int = 0
    constructor(size: Int){
    }
    open fun say(){
        // ..
    }
}

/**
 * 继承的时候需要调用父类的构造方法 使用 super
 */
class MyArray2 : MyArray{
    constructor(size: Int) : super(size)
    override fun say(){
    }
}
/**
 *
 * 这里是不会生成默认的构造方法的~~
 *
 */
open abstract class MyArray {

    var size: Int = 0

    constructor(size: Int){}

    open fun say(){
        // ..
    }

    abstract fun aSay()

}

/**
 * 继承的时候需要调用父类的构造方法 使用 super
 */
class MyArray2 : MyArray{

    override fun aSay() {

    }

    constructor(size: Int) : super(size)

    override fun say(){}

}

class User{
    var nickName: String = "dapi"  //这里的属性必须有默认值
    var name: String  //这个不用设置默认值
        get() = "dapi"
        set(value){
            name = value
        }
    var number: String = "122323232"
        set(number) {
            this.number = number
        }
}

class User{

    var nickName: String = "dapi"  //这里的属性必须有默认值

    var name: String  //这个不用设置默认值
        get() = "dapi"
        set(value){
            name = value
        }

    var number: String = "122323232"
        set(number) {
            this.number = number
        }

    lateinit var items: Array<String>
    lateinit var tag: String

}

interface Flyable{

    fun fly()

    fun 呵呵(){

    }

}

class User : Flyable{

    override fun fly() {
        // do fly
    }

    var nickName: String = "dapi"  //这里的属性必须有默认值

    var name: String  //这个不用设置默认值
        get() = "dapi"
        set(value){
            name = value
        }

    var number: String = "122323232"
        set(number) {
            this.number = number
        }

    lateinit var items: Array<String>
    lateinit var tag: String

}

    var arrs = arrayOf("xx")
    arrs.test()

fun Array<String>.test(){
    println("test")
}
data class Person(var name: String,var number: String)
sealed class Expr
data class Const(val number: Double) : Expr()
data class Sum(val e1: Expr, val e2: Expr) : Expr()
object NotANumber : Expr()

fun eval(expr: Expr): Double = when (expr) {
    is Const -> expr.number
    is Sum -> eval(expr.e1) + eval(expr.e2)
    NotANumber -> Double.NaN
}

关于类的东西还有一些没有提到~ 自己去看官网吧~ 我都还不熟


函数

fun doSome(){
    println("...")
}
fun doSome(message: String,other: String){
    println("... $message ... $other")
}
fun doSome(): Int{
    println("...")
    return 0
}
fun doSome(): Unit{
    println("...")
}
fun doSome(message: String,name: String): Int{
    println("...")
    return 0
}
fun doSome() = println("xxx") //可以没有返回值哈 等号右边是函数体
fun doSome(): String = "dapi" // 这个也可以有返回值

Lambda表达式

    /**
     *
     * () 里面的就是参数列表  -> 右边的就是返回值类型
     *
     */
    var sum: (Int,Int) -> Int // 定义一个求和的 表达式
    var max: (Int,Int) -> Int // 定义一个求最大值得表达式
    /**
     *
     * () 里面的就是参数列表  -> 右边的就是返回值类型
     *
     */
    var sum: (Int,Int) -> Int = {number1,number2 -> number1 + number2}
    var max: (Int,Int) -> Int = {x,y -> if (x > y) x else y}
fun doSome(message: String,transform: (String) -> String): String{
    return transform(message)
}
doSome("dapi",{messag -> messag.toUpperCase()})  // DAPI
fun doSome(message: String,transform: (String) -> String): String{
    return transform(message)
}
doSome("dapi",{it.toUpperCase()})  // DAPI

Nothing is certain in this life. The only thing i know for sure is that. I love you and my life. That is the only thing i know. have a good day

上一篇下一篇

猜你喜欢

热点阅读