零基础学 Kotlin 的朋友,是不是常遇到这种情况?代码看着明明没问题,一运行就报错;对着错误提示半天看不懂,改来改去还是错;好不容易改对了,下次写又犯同样的错。别沮丧,兔子哥当初自学时,光是变量定义就错了十几次,函数参数写错更是家常便饭。今天就把零基础自学 Kotlin 最容易犯的语法错误整理出来,每个错误都讲清原因和解决方法,新手跟着学,少走弯路!
一、变量定义错:var 和 val 分不清,代码一运行就红
变量是编程的基础,可新手最容易在这栽跟头,这几个错误几乎人人都犯过。
- 把 val 当 var 改,提示 “Val cannot be reassigned”
比如你写val 年龄 = 18,后面又想改年龄 = 19,运行就会报错。因为val定义的是常量,一旦赋值就不能改,就像身份证号不能变一样。解决方法很简单:如果要改值,定义时就用var,比如var 年龄 = 18,后面改年龄 = 19就没问题了。
兔子哥刚开始总记不住,把val和var混用,后来贴了张便利贴在屏幕上:“val 不变,var 可变”,慢慢就记住了。 - 变量没初始化就用,提示 “Variable 'xx' must be initialized”
写var 成绩: Int,然后直接用成绩 + 10,肯定报错。Kotlin 要求变量必须先赋值才能用,就像空杯子不能倒水一样。解决方法:定义时就赋值,var 成绩: Int = 0,或者用lateinit延迟初始化(不过新手暂时别用这个,容易出其他错)。
| 错误类型 | 错误提示 | 解决方法 |
|---|---|---|
| val 重复赋值 | Val cannot be reassigned | 改用 var 定义或不重复赋值 |
| 变量未初始化 | Variable must be initialized | 定义时直接赋值 |
二、函数写错:参数、括号出问题,函数调用全报错
函数是实现功能的核心,新手写函数时,括号、参数这些小细节最容易出错。
- 漏写函数参数类型,提示 “Expecting a parameter declaration”
比如写fun 算加法(a, b) { return a + b },运行就报错。Kotlin 要求函数参数必须写明类型,不然电脑不知道 a 和 b 是数字还是文字。解决方法:加上类型,fun 算加法(a: Int, b: Int) { return a + b },这样就对了。
虽然写类型多敲几个字,但能避免很多隐藏错误,新手千万别偷懒。 - 函数调用时参数数量不对,提示 “No value passed for parameter 'xx'”
定义函数fun 打招呼(名字: String, 年龄: Int),调用时只写打招呼("小明"),少了年龄参数,就会报错。解决方法:调用时参数数量和顺序要和定义时一致,打招呼("小明", 18)就没问题了。实在记不住参数顺序,调用时可以写明参数名,打招呼(名字 = "小明", 年龄 = 18),这样更清楚。
不过话说回来,函数参数也别定义太多,新手定义超过 3 个参数的函数,调用时很容易记混,尽量拆成多个简单函数更靠谱。
三、空安全踩坑:没处理空值,代码一运行就崩溃
Kotlin 的空安全是个好功能,但新手常因为没处理空值导致程序崩溃,这几个错误要特别注意。
- 直接用可能为空的变量,提示 “Only safe (?.) or non-null asserted (!!.) calls are allowed”
比如var 名字: String? = null,然后用名字.length,肯定报错。因为名字可能是空的,不能直接调用它的功能。解决方法:用?.安全调用,名字?.length(空的话就返回 null,不崩溃);或者先判断非空,if (名字 != null) { 名字.length }。
兔子哥建议新手优先用?.,简单又安全,!!.虽然能强制调用,但空的时候会崩溃,尽量别用。 - 把 null 赋值给非空变量,提示 “Null can not be a value of a non-null type String”
写var 地址: String = null会报错,因为地址定义成非空类型(没加?),不能赋值 null。解决方法:如果变量可能为空,定义时加?,var 地址: String? = null,这样就能赋值 null 了。
或许暗示着,空安全虽然增加了一点学习成本,但能帮新手减少很多莫名其妙的崩溃,掌握了反而更省心。
四、循环和条件错:逻辑写反,代码要么不运行要么死循环
循环和条件判断是控制代码流程的关键,新手容易在这里写反逻辑,导致代码出问题。
- 循环条件写反,导致死循环
比如想让变量从 5 减到 1,写var i = 5; while (i > 0) { i++ },i 会越来越大,永远满足i > 0,程序就卡死了。解决方法:检查循环条件,这里应该是i--,让 i 越来越小,while (i > 0) { i-- }才对。
写循环时最好先在纸上画流程,确认条件没错再敲代码,不然死循环得重启程序,很麻烦。 - if 条件里漏写括号,提示 “Expecting ')'”
写if 成绩 > 60 { println("及格") }会报错,Kotlin 要求 if 后面的条件必须用括号括起来。解决方法:加上括号,if (成绩 > 60) { println("及格") },这点和有些语言不一样,新手要特别注意。
五、自学避坑小技巧:新手必看的 3 个建议
- 报错别慌,先看错误提示最后一行
错误提示虽然是英文,但最后一行往往有关键信息,比如 “Val cannot be reassigned” 就是 val 重复赋值,直接搜这个提示,网上有一堆解决方法。兔子哥刚开始看不懂英文,就用翻译软件,慢慢就认识常见错误提示了。 - 写代码慢一点,重点检查括号和分号
Kotlin 不用加分号,但括号必须成对,新手常漏写右括号,导致整段代码报错。写的时候每敲一个左括号,马上补右括号,养成习惯就不容易错了。 - 遇到解决不了的错误,简化代码找原因
如果一段代码报错,就删到只剩几行,一步步加代码,看加到哪行开始报错,这样能快速定位错误位置。这个方法超实用,我现在遇到复杂错误还在用。
对了,关于 Kotlin 编译器是怎么精准检测这些语法错误的具体技术细节,我目前还不太清楚,得后面深入学习编译器原理才能弄明白,不过这不影响咱们先学会解决这些表面错误。
结尾心得
零基础学 Kotlin,语法错误是必经之路,别因为报错就放弃。我见过很多新手,刚开始错得一塌糊涂,坚持练习两个月后,错误越来越少。记住,每个错误都是在帮你熟悉语法规则,改对一个错误,就离熟练掌握近了一步。平时多把常见错误记在本子上,下次遇到直接翻解决方法,进步会更快。编程不怕错,就怕不练,现在就打开编辑器试试吧!
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~