Kotlin基础语法:变量、函数、类、枚举、控制流
一切都需要从基础学起!
前言:
在Kotlin语言中,没有分号的概念了,也就是每一行代码,都不在需要用分号结束了
定义
常量:val --相当于java当中的final
变量:var
关键字:如枚举关键字enum,在 ‘enum class 类名’ 中,enum是关键字,但是如果 ‘val enum = 1’中,enum就不是关键字了
类型:以冒号:隔开在后面,也可以省略直接赋值,类型后带问号?
表示可为空类型(默认空安全)
是否为null参数定义:如x: String?表示x变量是String类型,且该变量可以为null
数据打印:${x},其中x为要打印的变量,如
//顶层变量:只有var、val声明方式,如果没有指定变量的类型时,
// 在编译时由编译器自动根据赋予这个变量的值来推断这个变量的类型
val i = "1" //相当于java中 final ,值不可以更改的
var j = 2 //变量
var z: String = "这是一个String类型数据"
println("i = ${i},j = ${j},z = ${z},z.length = ${z.length}")
输出结果:
i = 1,j = 2,z = 这是一个String类型数据,z.length = 14
函数:
//顶层函数,类似java的main函数,其实也就是java的main函数,程序的入口(AS中输入main可自动补全)
fun main(args: Array<String>) {
println("这个是Kotlin的main函数")
}
PS:默认作用域是public
右键该文件运行,如同java文件启动main一样
//自定义函数
fun test(): String {
return "这个是Kotlin函数的return内容"
}
PS:在函数形参后面通过 :数据类型,如 : String 指定返回类型,如果没有声明返回的类型,那么默认类型是:Unit,
fun test1() = "声明函数后直接返回相应结果"
PS:可以声明一个函数并直接返回结果 fun test2(x: Int, y: String){
println("x = ${x},y = ${y}")
}
PS:声明指定函数接收的参数
fun test3(x: Int, y: Int) = if (x > y) {
x
} else {
y
}
PS:可以把函数主体换成表达式主体,把if当做是有返回值的表达式,在该函数被调用时,就会执行该if表达式并返回结果,并且这种 = if 的表达式可以使函数忽略返回类型
fun main(args: Array<String>) {
println("这个是Kotlin的main函数")
println(test())
println(test1())
test2(7, "这个是函数参数")
println("返回结果:${test3(2, 4)}")
}
输出结果:
这个是Kotlin的main函数
这个是Kotlin函数的return内容
声明函数后直接返回相应结果
x = 7,y = 这个是函数参数
返回结果:4
类定义
//简单的类定义
class Person {
}
PS:与java不同的是Kotlin可以在类名后面加上(val name: String?),表示给类定义属性(给Person类创建了需要带参数类型的构造方法,并且表示该参数可以为null),代码如下: class Person(val name: String?) {
}
PS:如果类不需要添加更多的方法,那么花括号{}也是可以不要的, 定义完整类如下:
class Person(var name: String?) {
//val 只有get获取器
val gender: String
get() = "男" var stature: Int = 0
get() = field
set(value) {
field = value
} var isMarried: Boolean = true
get() = field
set(isMarried) {
//field 就表示isMarried,需要给变量指定一个默认值
field = isMarried
}
}
PS:通过验证,获取器 只能这样写 get() = field ,否则会报如下异常(欢迎各位一起验证该获取器的写法,然后告知) Exception in thread "main" java.lang.StackOverflowError
var person = Person("itsdf07")
person.stature = 177
println("name = ${person.name}, gender = ${person.gender}, stature = ${person.stature}, isMarried = ${person.isMarried}")
输出结果:
name = itsdf07, gender = 男, stature = 177, isMarried = true 枚举类
//enum 软关键字,为什么是软关键字?只有跟在class前面才是关键字,否则不是关键字
enum class Color(val r: Int, val g: Int, val b: Int) {
RED(255, 0, 0),
BLUE(0, 0, 255),
YELLOW(255, 255, 0)
}
控制流
when语句 fun test4() {
//Kotlin中是没有switch关键字,而是使用when
//when带参数
when (Color.BLUE) {
//枚举常量 -> 相当于java中的case xxx: break;
Color.RED -> println("红色")
//如果枚举变量后面没有带 -> ,那么就类似java中的case没有写break
Color.BLUE,
Color.YELLOW -> println("蓝色或者黄色")
} //when 不带参数,就可以在when里面写任意表达式,比如以下中类似java中的if(){...} else if(){...}写法
when {
test3(2, 4) == 2 -> println("test3(2,4) = ${test3(2, 4)}")
test3(2, 4) == 4 -> println("test3(2,4) = ${test3(2, 4)}")
test3(2, 4) == 0 -> println("test3(2,4) = ${test3(2, 4)}")
} println("test5(2, 4) = ${test5(2, 4)}") }
fun test5(x: Int, y: Int) = when {
x == y -> 0
else -> {
when {
x > y -> x
else -> y
}
}
}
调用test4()
输出结果:
蓝色或者黄色
test3(2,4) = 4
test5(2, 4) = 4
for循环,中断和继续标签
在Kotlin中任何表达式都可以用label{:.keyword } (标签)来标记。label的格式是被'@'标识符标记,例如:aso@, dfsu@都是有效的label:
如果有多重循环,带标签的break会跳转出标签所指示的那一个循环。带标签的continue会跳转到标签所指向的那个循环,进入该循环的下一次循环。
fun test6() {
//6次循环,打印出0、1、2、3、4、5
val rang: IntRange = 0..5
//简单的全部循环
for (i in rang) {
println("i = ${i}")
}
println("rang 0..5 全部循环完成了") //循环过程中处理事件,如跳出 break
for (i in rang) {
println("i = ${i}")
if (i == 2) {
println("rang 0..5 跳出 i= ${i} 循环完成了")
break
}
}
//循环过程中处理事件,如跳过 continue
for (i in rang) {
if (i == 2) {
println("rang 0..5 跳过 i= ${i} 循环完成了")
continue
}
println("i = ${i}")
} //Kotlin也是支持goto的
for (i in rang) {
aso@for (j in rang){//执行到i== 3的时候,跳出该次循环
if (i == 3) {
println("rang 0..5 跳过 i= ${i} 循环完成了")
break@aso
}
println("i = ${i}, j = ${j}")
} }
}
Kotlin基础语法:变量、函数、类、枚举、控制流的更多相关文章
- typescript基础语法--变量/函数/指令/类
博客地址 :https://www.cnblogs.com/sandraryan/ 要把ts文件引入到html中,首先要转码为js文件. 步骤: 终端运行: npm i -g typescript t ...
- JAVA基础语法:函数(方法)、类和对象(转载)
4.JAVA基础语法:函数(方法).类和对象 函数 在java中函数也称为方法,是一段具备某种功能的可重用代码块. 一个函数包括这几部分: 函数头 函数头包括函数访问修饰符,函数返回值类型, 函数名, ...
- openresty开发系列14--lua基础语法3函数
openresty开发系列14--lua基础语法3函数 一)function (函数) 有名函数: optional_function_scope function function_name( ar ...
- python学习第五讲,python基础语法之函数语法,与Import导入模块.
目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...
- Kotlin基础语法学习
Kotline简介 Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源.与Java相比,Kotlin的语法更简洁.更具表达性,而且提供了更多的特性,比如,高阶函 ...
- Java基础语法(自定义类、ArrayList集合)
Java基础语法 今日内容介绍 u 自定义类 u ArrayList集合 第1章 引用数据类型(类) 1.1 引用数据类型分类 提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类 ...
- day133:2RenMJ:TypeScript的变量&函数&类&接口
目录 1.变量 2.函数 3.类 4.接口 1.变量 1.变量的声明 // 1.即指定数据类型 也指定值 var 变量名:类型 = 值; eg:var username:string = " ...
- python基础语法_9-0函数概念
http://www.runoob.com/python3/python3-function.html 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代 ...
- dll的概念 dll导出变量 函数 类
1. DLL的概念 DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数.变量或类.这些可以直接拿来使用. 静态链接库与动态链接库的区别: (1)静态链接 ...
- go基础语法-变量定义
1.基础定义 变量类型在变量名后 var a int var s string 2.定义并赋值 var a,b int = 1,2 var s string="abc" 3.类型推 ...
随机推荐
- 【转】【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 特殊问题和实战经验(五)
原文地址:http://www.cnblogs.com/baiboy/p/orc5.html 阅读目录 目录 共享存储 时间一致性 互联网络(或者私有网络.心跳线) 固件.驱动.升级包的一致性 共 ...
- json-lib与Jackson的区别和用法分析
一.Jackson概述 1.jackson包和版本 Jackson fasterxml和codehaus的区别: 他们是Jackson的两大分支.也是两个版本的不同包名.Jackson从2.0开始改用 ...
- 【剑指Offer】41、和为S的连续正数序列
题目描述: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数). ...
- codeforces 466B Wonder Room(思维,暴力)
题目 参考了别人的博客,百度来的博客 #include<iostream> #include<string> #include<stdio.h> #include& ...
- HDU1029 - Ignatius and the Princess IV【水题】
给你n个数字,请你找出出现至少(n+1)/2次的数字. 输入 本题包含多组数据,请处理到EOF: 每组数据包含两行. 第一行一个数字N(1<=N<=999999) ,保证N为奇数. 第二行 ...
- [51Nod 1218] 最长递增子序列 V2 (LIS)
传送门 Description 数组A包含N个整数.设S为A的子序列且S中的元素是递增的,则S为A的递增子序列.如果S的长度是所有递增子序列中最长的,则称S为A的最长递增子序列(LIS).A的LIS可 ...
- Linux思维导图之文件压缩
- 洛谷 P2805 BZOJ 1565 植物大战僵尸
题目描述 Plants vs. Zombies(PVZ)是最近十分风靡的一款小游戏.Plants(植物)和Zombies(僵尸)是游戏的主角,其中Plants防守,而Zombies进攻.该款游戏包含多 ...
- 孟晓阳:IT运行监控系统设计与使用心得
http://www.cn-healthcare.com/article/20160325/content-482138.html
- CentOS 7 安装Nginx做反向代理
题记 须要使用nginx的反向代理功能,測试环境为centos+NGINX 1.8.0. 跳过一些繁琐的问题,直接记录核心 步骤 (1)centos 安装在VM中.因此须要注意网络连接问题 (2)安装 ...