从第一篇文章中我们已经大概了解了如何创建一个kontlin语言的项目,或者如何从java转换为kotlin,本篇博客,将从最初的kotlin和java的却别慢慢学习kotlin语法.
package cn.yky.koyun
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
/**
* 查找控件
*/
val tvtest = findViewById(R.id.tv_main_test) as TextView
/**
* 设置控件内容
*/
tvtest.setText("好玩不好玩")
/**
* 调用方法输出控制台
*/
testfor("你说什么")
}
fun testfor(s: String) : Unit {
print(s)
}
}
public class MainActivity extends AppCompatActivity {
private String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tvMainTest = (TextView) findViewById(R.id.tv_main_test);
tvMainTest.setText("好玩不好玩");
testfor("你说什么");
}
public void testfor(String s) {
Log.d(TAG, s);
}
}
“public void testfor(String s)”被转换为了”fun testfor(s: String) : Unit”
其中Unit指的是返回值为void,如果返回为空也可以写成以下代码
fun testfor(s: String)
其中参数部分转换也比较大,但是也很好理解,那就是参数s继承于String类型
我们通过代码对比,有没有惊奇的发现没有’;’了,麻麻再也不用担心写代码忘记’;’了.
变量的话用”var”定义,如果说是常量的话用”val”进行定义,用法如下
val price = 100 //整型,可以编译
price = 30; //不可以编译,因为已经用val定义过它是个常量
var name = "are you ok" //字符串,可以编译
name = "詹姆斯" //字符串,可以编译,因为他是被定义为var的变量
name=123 //不可以编译,因为开始的时候已经把它定义为一个字符串了
var total=price*3 //整型,计算得出常量
以上我们理解了 “val”和”var”的区别了吗,不理解的可以多敲代码,写示例!!!或者留言给我思密达
你也可以直接指定常量或者变量的类型
val name :String ="yukoyun"
var size : Double = 15.0
var time : Float = 22f
发现了一个其他的事情没有哈,我们没有使用”double”,而是使用了”Double”,这是因为在Kotlin中,一切都是对象,为了实现性能,编译器会将一些对象转换为内部的原始类型
在kotlin中,你可以获取一些属性像java一样,例如,获取资源文件的字符串
resources.getString(R.string.abc_capital_off);
getResources().getString(R.string.app_name);
Kotlin最好的一件事就是,一切不能为空,除非你声明为空.通过使用’?’来实现.通过’?’来标识你的值可能存在,也有可能不存在.
var t: String = null //不能编译通过
var i: Int //不用做初始化.
var b: String? = null //这是可以进行编译通过的
用一个空的对象调用它的方法,是很容易出现空指针异常的.那么我们也可以通过’?’来避免这个问题的存在
val context : Context? = null
val res = context?.getResources() // 不会crash,但是res的结果是null
如果你想获取一个字符串的话,你会这么写
val context : Context? = null
val res = context?.getResources()
val appName = res?.getString(R.string.app_name)
val shortName = appName?.substring(0, 3)
但是这样我觉得,如果第一个是空的话,就没有必要走下一步了,我给出的代码例如下边的
val context : Context? = null
//这是一种java加konlin
if (context != null) {
val res = context.getResources() // 这里边的就不需要写'?'了
val appName = res.getString(R.string.app_name)
val shortName = appName.substring(0, 2)
}
/**
*纯kotlin实现
*/
val context : Context? = null
//一旦为null,就不需要走代码块了
context?.let {
val res = context.getResources() // 这里边的就不需要写'?'了
val appName = res.getString(R.string.app_name)
val shortName = appName.substring(0, 2)
}
更多语法可以参考kotlin的中文文档