美文网首页工作生活
Kotlin学习笔记(一)

Kotlin学习笔记(一)

作者: Gentleman_fad4 | 来源:发表于2019-07-25 09:00 被阅读0次

函数

假设我们要写一个简单的函数,这个函数的作用主要是比较输入值的大小,然后返回其中的最大值。

Java:
public int max(int a,int b){
       if (a > b) {
            return a;
        } else {
            return b;
        }
//或者使用三元运算符 return a > b ? a : b;
}

Kotlin:
//代码块体函数
fun max(a: Int, b: Int): Int {
    return if (a > b) a else b
}

//简化,表达式函数体,省略了函数的返回值类型,并且直接将表达式作为该函数的返回值
fun max(a: Int, b: Int) = if (a > b) a else b

小结:

  • kotlin可以省略每行代码结尾的分号
  • kotlin函数的声明是以关键字fun开始的
  • kotlin语法中,先写参数名然后冒号,后面才是参数类型,这里跟Java的语法是相反的。例如 a:Int
  • kotlin中函数还可以简写为表达式函数体,就是直接省略函数的返回类型,然后将函数体的表达式作为函数的返回值,也就是函数的返回值类型就是函数表达式的返回类型,可以这样写的原因是,编译器会分析函数体的表达式,并将它的类型作为函数的返回类型。注意,如果是有返回值的代码块函数,必须显式的写出返回类型和return类型

变量

Java:
String name= “Hello World”;
int age = 12;
double money = 7.5e6;

Kotlin:
//在kotlin中,可以省略变量的类型,编译器会分析初始化器表达式的值,并把它的类型作为变量的类型。
var name = "Hello World"
var age = 12
var money = 7.5e6

//在kotlin中声明的关键字有两个:
val(value):不可变引用,使用val声明的变量不能在初始化之后再次赋值,它对应的是Java的final变量,其实val和final还是有区别的,
val虽然不可变但他不是编译器常量,即编译器在编译期的时候不能确定他的值,如果在kotlin中想定义编译器常量的话则需要加上const关键字
var(variable)可变引用,这种变量的值是可以被改变。这种声明对应的是普通(非final)的Java变量

Java:
String name = "Hello World";
final String name = "Hello World"

Kotlin:
var name = "Hello World"
val name = "Hello World"

字符串模板

与Java相比,Kotlin有一个新特性,叫做字符串模板,Kotlin在字符串面值中想要引用局部变量的时候,只要在变量名称前面加上字符$。

Java:
public static void main(String[] args) {
    String name = "Gentleman";
    System.out.println("Hello," + name);
}

Kotlin:
fun main(args: Array<String>) {
    val name = "Gentleman"
    println("Hello,$name")
//当然字符串模板不仅限于简单的变量名称,还可以引用更复杂的表达式,不过使用表达式的时候要用花括号括起来
    println("Hello ,${if (args.size > 0) args[0] else "Gentleman"}")
}

类和属性

在Java中类是这样的
public class Student{
  private final String name;

  public Student(String name) {
      this.name = name;
   }

  public String getName() {
      return name;
  }
}

//相同的类,用kotlin来写的话是这样的
class Student(val name:String)

在Java中,我们需要在构造方法中写很多重复的代码,把参数赋值给有着同样名称的字段。而在Kotlin中,这种逻辑不用这么多的样板代码就可以表达了,在Kotlin中把public修饰符去掉了,这是因为在Kotlin中public是默认的可见性,所以可以把它省略掉。

在刚才的例子中,Kotlin中声明的属性时不可变属性,接下来我们来试试可变属性
//在这里name是只读属性:生成一个字段和一个简单的getter,age是可写字段,一个getter和一个setter
class Student(val name: String,var age:Int)

//Student类的实例化和使用

Java:
Student student = new Student("Gentleman",18);
System.out.println("name = "+student.getName()+" age = "+student.getAge());

Kotlin:
//调用构造方法时不需要new关键字
val student = Student("Gentleman",18)
//可以直接访问属性,但调用的是getter
println("name = "+student.name+"age = "+student.age)

自定义访问器

还是以之前的Student,现在我们想知道这个学生是否成年,在kotlin中,不需要一个单独的字段来存储这个信息(是否成年),因为可以随时通过检查学生的年龄来判断

class Student(val name: String,var age:Int){
  val isAdult:Boolean
         get(){
              return age>=18
         }
}

//属性isAdult不需要字段来保存它的值,它只有一个自定义实现的getter,它的值是每次访问属性的时候计算出来的

小结:

  • kotlin跟Java相比,在类的书写上,省略了Java构造器中的重复模板代码
  • kotlin在实例化类的时候可以省略new关键字
  • kotlin默认是省略public修饰符的,因为public是kotlin默认的可见性

相关文章

网友评论

    本文标题:Kotlin学习笔记(一)

    本文链接:https://www.haomeiwen.com/subject/hveicctx.html