最近在学习相关kotlin的有关知识,在爱奇艺上找到一个关于kotlin基础知识的是视频,看完之后感觉受益匪浅,这个只是基础知识视频,新手看还可以,大神就算了,下面是这个视频的网址:http://www.iqiyi.com/v_19rr82t3g4.html
主要都是以代码的形式:
fun main(args : Array<String>){
println("This is my first kotlin project")
println("3+5="+ test3(3,5));
test4(10,20,30,50);
println("匿名函数测试:"+ test5(3,5))
test7()
test9(80);
test11()
test12("水")
test12(null);
test13(10);
test13(9);
test13(8);
test13(7);
test13(1);
test14();
test15()
test16()
circumfeRenceOfCircle(radius = 10.0F)
circumfeRenceOfCircle1(diameter = 20.0F)
println("5的阶乘是:"+ recursiveTest(5));
var num : BigInteger= BigInteger.valueOf(100L)
println("100的阶乘是:"+ recurseveTest2(num));
println("100的累加是:"+ ollAdd(100,0));
}
/*
* 自定义函数的格式:
* fun:函数定义关键字
*sunNormal函数名
* a,b为参数名
* Int为参数类型
* 最后的Int为函数的返回值
* */
//一个普通的函数
fun sumNormal(a : Int, b : Int) : Int{
return a+b;
}
//表达式作为函数体,返回类型自动推断
//这个函数和上面的函数执行的效果是一样的
fun sumNormal1(a : Int, b :Int) = a+b
//无返回值类型的函数,类似于java中的void
//使用Unit关键字表示没有返回值,同时,没有返回值也可以什么都不写
fun sayHello(userName : String) : Unit{
println("你好,"+userName)
}
//这个函数和上面的函数效果是一样的
fun sayHello1(userName: String){
println("你好,"+userName)
}
/*
* 当一个函数使用public修饰符时,除非是无返回值的函数,否则必须明确注明函数的返回值
* */
//没有返回值的函数使用public修饰也可以不写返回值类型
public fun test1(){
println("使用public修饰函数没有返回值可以不写返回值类型");
}
public fun test2(a : Int, b : Int) : Int{
println("使用public修饰有返回值的函数必须明确注明返回值类型,不可以使用自动推断的返回值类型");
return a+b;
}
//上面的总结是在菜鸟教程看到的,但是在使用的时候发现也可以使用下面的方法,并没有报错,可能是因为版本更新已经可以这样写了
public fun test3(a : Int, b : Int) = a+b;
//使用vararg修饰可变长度的参数列表
fun test4(vararg args : Int){
println("获取到当前函数的参数列表的长度为:"+args.size);
var num : Int = 0;
for (i : Int in args){
num += i;
}
println("当前参数和为:"+num)
}
//匿名函数lambda
fun test5(a : Int, b : Int) : Int{
val sum : (Int,Int) -> Int = {x,y -> x+y}
return sum(a,b);
}
//定义常量与变量:var定义变量
//var 变量名 : 变量类型 = 初始化值
//val 常量名 : 常量类型 = 初始化值
//编译器支持自动判断类型,声明是可以不指定类型,由编译器判断
fun test6(){
var a : Int = 0;//普通变量定义,整型a的初始值为0
val b = 10;//由编译器判断变量或常量的类型
var c : Int;//如果在声明的时候不指定初始化值,则必须明确指定变量的类型
}
//字符串模板
/*
* $表示一个变量名或者变量值
* $varName表示变量值
* ${varName.fun}表示变量的方法返回值
* */
fun test7() : Unit{
var a : Int= 1;
var str : String = "My name is zyf";
val s2 = "${str.replace("zyf","gwj")},but old name is zyf,共有${str.length}个字符串";
println(s2);
}
//NULL检查
/*
* 在使用看的引用的时候需要做非空检查,一种是使用!!抛出空指针异常,另一种是字段后加?可不做处理返回为null或配合?:做空判断处理
* */
fun test8() : Unit{
//类型后面加?表示可为空
var age : String? = "23"
//抛出空指针异常,确保不会出现空值
val ages = age !!.toInt()
//不做处理返回null
val ages1 = age?.toInt()
//age为空返回-1
val ages2 = age ?.toInt() ?: -1;
}
/*
* 条件控制
*
* */
fun test9(face : Int) : Unit{
if(face > 80){
println("这是一个帅哥")
}else{
println("赶紧去整容吧")
}
}
//返回两个数中的较大的那个
fun test10(a : Int, b : Int) : Unit{
var num : Int = 0;
if(a > b){
println("($a)和($b)中较大的那个数是:"+a);
}else if(a < b){
println("($a)和($b)中较大的那个数是:"+b);
}else{
println("($a)和($b)两个数相等");
}
}
/*
* 字符串比较
* kotlin中对于字符串的比较中 : == 和java中的equals方法相同
* */
fun test11() : Unit{
var name1 : String = "张三";
var name2 : String = "张三";
if(name1 == name2){
println("$name1 和 $name2 是同一个人" );
}else{
println("$name1 和 $name2 不是同一个人")
}
var name3 : String = "Andy";
var name4 : String = "andy";
println(name3.equals(name4,true));//第二个参数代表的意思是是否忽略大小写,默认是false
println(name3.equals(name4,false));
}
/*
* kotlin中的空值处理
* null也是值,代表没有数据
* test12这个方法接受一个不为空的字符串,如果在参数的后面加上一个“?”,则表示传递过来的参数可以为空,这个方法很好的在编写代码的阶段就避免了NullPointException
* */
fun test12(str : String?) : Unit{
println("热"+str);
}
/*
* kotlin的when表达式
* */
fun test13(grade : Int) : Unit{
when(grade){
10 -> println("考了满分");
9 -> println("还不错");
8 -> println("挺好");
else -> println("还需努力")
}
}
/*
* kotlin的loop和range
*
* loop:循环
* range:区间
* */
public fun test14() : Unit{
var nums = 1..100;//声明一个数组,这个数组中的值是1到100[1,100]
var result : Int = 0;
for (num : Int in nums){
result += num;
}
println("${nums.first}到${nums.last}的和是:"+result);
println("${nums.start}");
//until表示从1到100但是不包含100
var nums1 = 1 until 100;
for(num : Int in nums1){
//println(num)
}
//step表示跳过几步
var nums2 = 1..20;
for (a : Int in nums2 step 3){
println (a)
}
//reversed对集合进行倒序排列
var nums3 = nums2.reversed();
for( a : Int in nums3){
println(a);
}
//count
println("${nums3.first}到${nums3.last}的总数为:"+nums3.count());
}
/*
* kotlin的list
* */
fun test15() : Unit{
var lists = listOf("买鸡蛋","买大米","买水果",20);
for((i,e) in lists.withIndex() ){
println("$i --> $e")
}
}
/*
* map
* */
fun test16() : Unit{
var map = HashMap<String,String>();
map["学习"] = "学习";
map["使我"] = "使我";
map["快乐"] = "快乐";
for(str : String in map.keys){
println(map.get(str));
}
}
/*
* kotlin默认参数和具名参数
*以下方法计算一个圆的周长
* 圆的周长的计算公式 = PI *直径或者PI*2*半径
* 普通情况下我们调用方法的时候需要床底两个参数,pi,半径或者直径,但是因为pi是一个常数,我们可以直接定义一个常量,那么在调用方法的时候就只需要传递一个参数就可以了,
* 但是方法接收的是两个参数,此时就可以使用具名参数,在传递参数的时候将参数名携带上,就可以了
* */
val PI = 3.1415926F;
fun circumfeRenceOfCircle(pi : Float = PI, radius : Float) : Unit{
println("半径为$radius 的圆的周长为:"+(2 * PI * radius));
}
fun circumfeRenceOfCircle1(pi : Float = PI,diameter : Float) : Unit{
println("直径为$diameter 的圆的周长为:"+(PI * diameter));
}
/*
* kotlin中字符串和数字之间的转换
* */
fun test17() : Unit{
var a = "13";
var b = 13;
//数字转换为字符串
a = b.toString();
//字符串转数字
b = a.toInt()
//如果字符串中含有不是数字的字符,那么在转换的时候会报NumberFormatException
}
引用块内容
快捷键
- 加粗
Ctrl + B
- 斜体
Ctrl + I
- 引用
Ctrl + Q
- 插入链接
Ctrl + L
- 插入代码
Ctrl + K
- 插入图片
Ctrl + G
- 提升标题
Ctrl + H
- 有序列表
Ctrl + O
- 无序列表
Ctrl + U
- 横线
Ctrl + R
- 撤销
Ctrl + Z
- 重做
Ctrl + Y
Markdown及扩展
Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ 维基百科 ]
使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个链接等,详细语法参考帮助?。
本编辑器支持 Markdown Extra , 扩展了很多好用的功能。具体请参考Github.
表格
Markdown Extra 表格语法:
项目 | 价格 |
---|---|
Computer | $1600 |
Phone | $12 |
Pipe | $1 |
可以使用冒号来定义对齐方式:
项目 | 价格 | 数量 |
---|---|---|
Computer | 1600 元 | 5 |
Phone | 12 元 | 12 |
Pipe | 1 元 | 234 |
定义列表
-
Markdown Extra 定义列表语法:
项目1
项目2
- 定义 A
- 定义 B 项目3
- 定义 C
-
定义 D
定义D内容
代码块
代码块语法遵循标准markdown代码,例如:
@requires_authorization
def somefunc(param1='', param2=0):
'''A docstring'''
if param1 > param2: # interesting
print 'Greater'
return (param2 - param1 + 1) or None
class SomeClass:
pass
>>> message = '''interpreter
... prompt'''
脚注
生成一个脚注1.
目录
用 [TOC]
来生成目录:
数学公式
使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.
- 行内公式,数学公式为: Γ(n)=(n−1)!∀n∈N 。
- 块级公式:
更多LaTex语法请参考 这儿.
UML 图:
可以渲染序列图:
或者流程图:
离线写博客
即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.youkuaiyun.com/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。
用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。
博客发表后,本地缓存将被删除。
用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。
注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱。
浏览器兼容
- 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
- IE9以下不支持
- IE9,10,11存在以下问题
- 不支持离线功能
- IE9不支持文件导入导出
- IE10不支持拖拽文件导入
- 这里是 脚注 的 内容. ↩