Kotlin是一种现代编程语言,可编译为Java字节码。 它是免费和开源的 ,并有望使Android编码更加有趣。
Kotlin可与Java 100%互操作。 换句话说,它可以与Java在同一项目中一起使用。 因此,您可以将Java代码的一部分重构为Kotlin,并且不会中断。 除此之外,它简洁,富有表现力,并且具有出色的工具。 Kotlin可以在后端(服务器端)上使用,但是作为Android应用程序开发的一种语言,它现在正受到很多关注。 谷歌现在已经将Kotlin作为一流的Android开发语言来支持,因此Kotlin的受欢迎程度将激增!
在Kotlin From Scratch系列的第一个教程中,您将学习语言的基础知识:注释,变量,简单类型,数组和类型推断。
先决条件
要与我一起学习,您将需要Android Studio上的Kotlin插件 。 或者,您可以使用在线游乐场或IntelliJ IDEA社区版 。
1.变量
在Kotlin中,使用val
声明常量或使用var
关键字声明变量。 您可以在变量名称后面指定诸如String
或Int
类的类型。 在下面的示例中,我们使用val
关键字声明了String
类型的常量firstName
。
val firstName: String = "Chike"
但是您很快就会意识到,在Kotlin中,通常可以从声明中省略类型,并且编译器不会抱怨。
val lastName = "Mgbemena" // will still compile
在上面的代码中,您将看到我们没有明确声明String
类型。 上面的代码仍然可以使用,因为编译器已使用类型推断隐式地推断了类型。 我们将回到这个!
val
和var
关键字的区别在于,前者是不可变的或只读的(其值不能更改),而后者是可变的(其值可以更改)。
val dateOfBirth = "29th March, 1709"
dateOfBirth = "25th December, 1600" // cannot be changed
var car = "Toyota Matrix"
car = "Mercedes-Maybach" // can be changed
请注意,对于使用var
关键字声明的变量(其类型由编译器推断),分配其他类型的值将不起作用。 换句话说,变量的值可以更改,但其类型不能更改! 例如:
var age = 12
age = "12 years old" // Error: type mismatch
强烈建议您先使用val
关键字声明变量,使变量不可变,以免保持过多状态。 这使您的代码对于多线程更安全,因为它确保变量不会被其他线程意外修改。
关于val
关键字,您应该了解的另一件事是,您只能使用类型声明它,并在以后为其分配值。 但是您仍然只能分配一次值。
val carName: String
carName = "Toyota Matrix" // will compile
在Java中,可以在一行上声明多个相同类型的变量,但这在Kotlin中不起作用。 在Kotlin中,所有变量声明都必须单独显示。
val carName = "BMW", streetName = "Oke street" // this won't compile
// this will compile
var carName = "BMW"
var streetName = "Oke street"
2.类型推断或推论
Kotlin是一种强类型语言,支持类型推断或推论。 这是编译器用来从上下文中找出类型的机制。 Java没有类型推断机制,这意味着您必须显式声明每个函数或变量的类型。 类型推断有助于减少您必须编写的样板代码。
val country = "Nigeria" // type is inferred by compiler
val code = 234
即使我们没有明确声明变量国家的类型,上面的代码也可以编译。 编译器足够聪明,可以知道国家/地区的类型为String
,因为值“ Nigeria”是字符串。
3.基本类型
在Java中,我们有两种类型:基本类型(例如int,long,boolean,byte,char等)和引用类型(例如array, String
)。 Java使用包装器(如java.lang.Integer
)使基本类型的行为类似于对象。 但是在Kotlin,没有这种区别。 相反,所有类型都是对象。
号码
Kotlin中可用的整数类型为:
-
Long
64位 -
Int
—32位 -
Short
16位 -
Byte
— 8位
浮点类型为:
-
Double
64位 -
Float
32位
val myInt = 55
val myLong = 40L
val myFloat = 34.43F
val myDouble = 45.78
val myHexadecimal = 0x0F
val myBinary = 0b010101
您可以观察到,我们通过添加后缀L
创建了Long
字面量,对于Float
我们添加了后缀F
或f
。 数字也可以使用0x
或0X
前缀以十六进制表示法写入,并使用0b
或0B
前缀以二进制形式写入。 请注意,在所有这些情况下,Kotlin都可以使用类型推断来知道我们想要的类型。
val myLong = 19L
val myLongAgain: Long = 40
要将数字从一种类型转换为另一种类型,必须显式调用相应的转换函数。 换句话说,数字类型之间没有隐式转换。
val myNumber = 400
val myNumberAgain: Long = myNumber // throws Error: Type mismatch
每种数字类型都有一些辅助函数,这些函数可以从一种数字类型转换为另一种数字: toByte()
, toInt()
toLong()
, toFloat()
toDouble()
, toChar()
, toShort()
, toChar()
, toShort()
。
val myInt = 987
val myLong = myInt.toLong()
在上面的代码中,我们正在从整数转换为long。 我们也可以通过在long变量上使用toInt()
方法来进行相反操作。 请注意,如果需要的话,这将截断该值以适合较小的Int
类型—在从较大的类型转换为较小的类型时要格外小心!
您还可以将String
转换为数字类型。
val stringNumber = "101"
val intValue = stringNumber.toInt()
在上面的代码中,我们通过在变量上调用方法toInt()
将变量stringNumber
转换为Int
类型。 通过代替直接在字符串上调用方法,我们可以更简洁地编写此代码:
val intValue = "101".toInt()
布尔类型
Kotlin中的Boolean
类型与Java中的Boolean
类型相同。 其值可以为true或false。 像Java一样,可以对布尔类型执行除法运算( ||
),合取运算符( &&
)和否定运算符( !
)。
val myTrueBoolean = true
val myFalseBoolean = false
val x = 1
val y = 3
val w = 4
val z = 6
val n = x < z && z > w // n is true
弦乐
可以使用双引号或三引号创建字符串。 除此之外,转义字符可以与双引号一起使用。
val myString = "This is a String"
val escapeString = "This is a string with new line \n"
为了在源文件中创建一个跨越多行的字符串,我们使用三引号:
val multipleStringLines = """
This is first line
This is second line
This is third line """
Kotlin还支持字符串插值或字符串模板。 这比建立连接更容易,因为它是建立动态字符串的方法,而串联是我们在Java中使用的方法。 使用字符串模板,我们可以将变量和表达式插入字符串中。
val accountBalance = 200
val bankMessage = "Your account balance is $accountBalance" // Your account balance is 200
在上面的代码中,我们创建了一个字符串文字,并且在其中,我们通过在变量名称前面使用$
字符来引用变量。 请注意,如果变量不正确或不存在,则代码不会编译。
如果需要在字符串中使用$
怎么办? 您只需使用\$
转义即可! 另外,您可以直接从插值的String
调用方法。 您必须添加大括号${}
来包装它。
val name = "Chike"
val message = "The first letter in my name is ${name.first()}" // The first letter in my name is C
您可以做的另一很酷的事情是在创建String
文字时在花括号内执行一些逻辑。
val age = 40
val anotherMessage = "You are ${if (age > 60) "old" else "young"}" // You are young
数组
在Kotlin中,有两种创建数组的主要方法:使用辅助函数arrayOf()
或构造函数Array()
。
arrayOf()
函数
例如,让我们使用arrayOf()
创建一个包含一些元素的数组。
val myArray = arrayOf(4, 5, 7, 3)
现在,要访问任何元素,我们可以使用其索引: myArray[2]
。 请注意,我们可以将不同类型的值作为参数传递给arrayOf()
,它仍然可以工作-它是混合类型的数组。
val myArray = arrayOf(4, 5, 7, 3, "Chike", false)
为了强制所有数组值具有相同的类型,例如Int
,我们通过调用arrayOf
或intArrayOf()
声明类型。
val myArray3 = arrayOf(4, 5, 7, 3, "Chike", false) // will not compile
val myArray4 = intArrayOf(4, 5, 7, 3, "Chike", false) // will not compile
我们还有其他实用程序函数来创建其他类型的数组,例如charArrayOf()
, booleanArrayOf()
, longArrayOf()
, shortArrayOf()
, byteArrayOf()
等。 在幕后,使用这些函数将创建各自的Java基本类型的数组。 换句话说, intArrayOf()
将编译为常规Java基本类型int[]
, byteArrayOf()
将为byte[]
, longArrayOf()
将为long[]
,依此类推。
Array()
构造函数
现在让我们看看如何使用Array()
创建一个数组。 此类的构造函数需要一个大小和一个lambda函数。 在本系列的后面部分,我们将学习更多关于lambda函数的信息,但是到目前为止,您只需了解这是一种声明匿名函数的简单的内联方式即可。 在这种情况下,lambda函数的工作是使用元素初始化数组。
val numbersArray = Array(5, { i -> i * 2 })
在上面的代码中,我们在第一个参数中传递了5作为数组的大小。 第二个参数接受一个lambda函数,该函数获取数组元素的索引,然后返回要在数组中该索引处插入的值。 因此,在上面的示例中,我们创建了一个包含元素0、2、4、6和8的数组。
4.评论
这是个简单的。 在Kotlin中,注释与Java中的注释相同。 我们可以使用块或行注释:
/*
hello, this is a block comment
with multiple lines.
This is another line.
This is another one again
*/
// this is a single line comment
结论
在本教程中,您学习了Kotlin编程语言的基础知识:变量,基本类型,类型推断,数组和注释。 在Kotlin From Scratch系列的下一篇教程中,您将了解Kotlin中的循环,范围,条件,集合和包。 再见!
翻译自: https://code.tutsplus.com/tutorials/kotlin-from-scratch-variables-basic-types-arrays-type-inference-and-comments--cms-29328