코 틀린 학습 (2) 구문

1. 변수 식별자와

코 틀린 모든 변수 유형 참조 형식이다.
코 틀린로 변수 val(不可变的)와는 var(可变的)간단히 알 수있다 :

  • 발은 읽기 전용, 첫 번째 할당을, 후자 캔의 재 할당 할 수 없습니다
  • VAR는 자사의 라이프 사이클에 기록, 많은 시간을 할당 할 수 있습니다

예를 들어 :
그림 삽입 설명 여기
val-> VAR 동안이 작업은 오류가되지 않습니다.

자바와 같은 변수 명명 규칙. 우리는 일반적으로 고비 명명법에 따라 그래서

2. 키워드 수정

클래스 수정 설명
결정적인 그것은 상속 될 수 없습니다
열다 그것은 상속 될 수 있습니다
요약 추상 클래스
열거 열거 클래스
데이터 데이터 클래스
밀봉 봉인 된 클래스
주석 클래스 노트
수식의 회원 설명
우세하다 재 작성 기능
열다 그것은 다시 작성할 수 있습니다
결정적인 그것은 다시 쓸 수 없습니다
요약 추상 기능
늦게 초기화 늦은 초기화
액세스 수정 설명
공공의 접근 외국
은밀한 개인, 접근 할 경우에만 클래스
보호 현재 클래스와 상속 클래스가 액세스 할 수
내부의 당신은 전체 모듈에 액세스 할 수 있습니다
수정 공변 인버터 설명
, T 밖으로 소비자 유형 수정에 해당? T를 확장
T에서 생산자 유형 수정에 해당? 슈퍼 T

그것에 대해 이야기 한 후 사용하는 경우 다른 수식어는 거의 때문에, 사용하지 않습니다.

3. 공정 관리

3.1 표현하는 경우

코 틀린 다른 ... 문 및 Java는 약간의 차이가있는 경우 ...있다.
다음은 몇 가지 예입니다 :

    //一个比较大小的函数
    fun max(a: Int, b: Int): Int {
        val max = if (a > b) a else b
        return max
    }

    //代码块形式
    fun max(a: Int, b: Int): Int {
        val max = if(a>b){
            print("max value is a")
            a
        }else {
            print("max value is b")
            b
        }
        return max
    }

첫 번째 함수가 반환 진정한 자바 무거운 같은 비트 1 :? 0 표현의 삼중
하지만 코 틀린하지, 그래서 코 틀린) (경우 ... 다른 ...를 사용하는 식의 이러한 삼중를 달성

기타 사용 및 Java는 전혀 다른이없는 경우

3.2 때

when표현식과 자바는 switch..case유사합니다.
코 틀린은 미니멀 한 스타일이 될 때문에, 그래서 여기, 스위치보다 쓰는 것이 더 편리 예 때 :

   fun caseWhen(obj: Any?) {
        when (obj) {
            0, 1, 2, 3 -> print("是0123中的一个")
            "你好" -> print("是你好")
            else -> print("什么都不是")
        }
    }

어떤 else동등하다 switch-case에가 default
볼 수있는 문이 많은 경우를 작성하지 않지만 분기 조건으로 어떤 표현을 사용할 수있는 경우

루프 3.3

for 루프는 모든 객체에 이송 될 수는 반복자를 제공합니다

 //用in 遍历
 for(item in collection){
 .....
 }

 //用索引遍历数组或者list  其中indices存储了数组array的下标
 for(i in array.indices){
    print(array[i])
 }

indices이는 어레이 인덱스를 저장한다. 우리는 또한 사용할 수 withIndex아래 통과에 해당하는 표준 요소를 :

for((index,value) in array.withIndex){
   println("the element at $index is $value")
}

또한, 범위 (범위) 식 또한, 루프 내에서 사용될 수있다 :

for(i in 1..10){
   println(i)
}

//简写代码为
(1..10).forEach { println(it)}

3.4 while 루프

동안 루프 모드는 C, Java 언어와 기본적으로 동일한을 사용하는 동안 ... 너무 건너 않는다

3.5 계속 和 휴식을

그리고 자바에서 계속 휴식은 그렇게 건너, 기본적으로 동일

3.6 반환 반환

자바와 마찬가지로, 함수는 값을 반환하는 반환에 표시 할 값을 반환합니다.
또한, 이용도 함수의 리턴 값을 "="직접 코 틀린를 사용할 수도 있고, 이러한 함수가된다 함수 리터럴 :

    fun sum(a: Int, b: Int) = a + b
    fun max(a: Int, b: Int) = if (a > b) a else b
    
    //也可以声明一个匿名函数
    val sum = fun(a: Int, b: Int) = a + b
    sum(1,2)

마지막 예는 위의 기능을 구현하기 위해 직접 사용하는 식이다. 뒷면 주목해야한다 function 문을 몸이 더 중괄호가 완전히 다른 의미를 나타냅니다 없습니다 .

이와 같은 람다 표현식 :

 //这样子声明,sumf就是一个高阶函数
 val sumf = fun(a: Int, b: Int) = { a + b }

 //直接调用的并不会返回结果而是返回一个函数体
 sumf(1,2)
 >>> () -> kotlin.Int

 //如果要调用,得使用invoke方法,  或者 (),它和invoke等价
 sumf(1,2).invoke()
 sumf(1,2)()
 >>>3

당신은 괄호가있는 경우, 둘 이상의 기능의 동등 물이있다. 직접 통화 sumf (1,2) int 값이 아닌 반환하고 다시 int 값을 반환하는 메소드를 호출 이동 합 (1,2)에 기초하고 싶다.

람다 가까운 외부 기능에 직접적으로 다시 내측 복귀가 있으면 ,이 사실은 잘 확실히 기능 체 아의 값을 반환하는 반환 최근 이해

3.7 라벨 태그

상관 식은 코 틀린 레이블 (라벨) 태그에 사용될 수있다 @ 의해 이어진다 식별자 라벨 형식 로그인
헬로 등을 @ 키 @ 태그는 유효하다.
우리는 반환을 제어 끊거나 문이 동작을 점프 계속 라벨 태그를 사용할 수 있습니다. 예를 들면 :

    val intArray = intArrayOf(1, 2, 3, 4, 5)
    //here@ 是下一个标签
    intArray.forEach here@{
            if (it == 3)
            //执行指令跳到Lambda表达式标签here@处。进行下一个it=4的遍历循环
            return@here

            println(it)
     }

>>>2019-10-30 10:41:40.929 13461-13461/com.rikkatheworld.mykotlindemo I/System.out: 1
2019-10-30 10:41:40.929 13461-13461/com.rikkatheworld.mykotlindemo I/System.out: 2
2019-10-30 10:41:40.929 13461-13461/com.rikkatheworld.mykotlindemo I/System.out: 4
2019-10-30 10:41:40.929 13461-13461/com.rikkatheworld.mykotlindemo I/System.out: 5

here@특정 상황, 사용에 직면했을 때 실제로 포털되어 return@here, 당신은 이동할 수 있습니다 here@에서

또한 람다의 수신과 같은 이름을 가진 함수를 암시 적 태그를 사용할 수 있습니다 :

        val intArray = intArrayOf(1, 2, 3, 4, 5)
        intArray.forEach {
            if (it == 3)
                return@forEach
            println(it)
        }

3.8 던져 표현

코 틀린에 던져는 유형이 특별한 형태 인 표현이다 Nothing, 그리고 C, 자바는 void같은
또한 변수를 선언 우리는 변수에 할당 던져 식을 원한다면, 당신은 주목되는 표시해야합니다 :

val ex: Nothing = throw  Exception("you wrong")

fun fail(msg: String): Nothing {
        throw IllegalArgumentException(msg)
}

4. 과부하 연산자 및

운영자의 대부분, 그리고 우선 순위가 JAVA되고, C는 거의 몇 가지 특별한 오버로드와 비교 연산자를 말한다.

  1. "+"과부하가
    ""+1문자열 과부하 또한이며, 출력은 1
    1+ "", 그리고 무시하지 않습니다 플러스 지능 문자열, 컴파일러가 불평 할 것이다
  2. 연산자
    에 대한 운영자의 자바 동등한 contains()
    a in bb.contains(a)
  3. 엘비스 연산자 :?
    엘비스 특히 운전자가 null 비교 지금
    y = x?:0이다 val y = if(x!= null) x else 0
    따라서 엘비스의 등가 삼원 연산자 인
  4. 사용자 정의 기능 중위 중위 연산자
    클래스 :
    data class Person(val name: String, val age: Int)
    infix fun Person.grow(years: Int): Person {
        return Person(name, age + years)
    }

그런 다음 호출 할 수 있습니다 :

        val rikka = Person("rikka", 20)
        
        //直接调用函数
        print(rikka.grow(2))
        //中缀表达式调用方式
        print(rikka grow 2)

출력 22

게시 된 248 개 원래 기사 · 원 찬양 99 ·은 10 만 + 조회수

추천

출처blog.csdn.net/rikkatheworld/article/details/102792522