728x90

Play.Kotlin 의 예시코드중 자주 볼 것들을 가져왔음...

출처 : https://play.kotlinlang.org/byExample/05_Collections/

 

Kotlin Playground: Edit, Run, Share Kotlin Code Online

 

play.kotlinlang.org

 

1. filter : 조건을 람다로넣어주면 모든 element 를 확인해 true 값만 들어간 collection 을 return

val numbers = listOf(1, -2, 3, -4, 5, -6)      // 1

val positives = numbers.filter { x -> x > 0 }  // 2

val negatives = numbers.filter { it < 0 }      // 3

 

result

Numbers: [1, -2, 3, -4, 5, -6]
Positive Numbers: [1, 3, 5]
Negative Numbers: [-2, -4, -6]

 

 

 

2. map : collection 의 한 종류인 Map 과 다른것이다.... (왜 이름을 이렇게...?)

람다로 받은 변형을 모든 element에 적용시킨 collection 을 return

val numbers = listOf(1, -2, 3, -4, 5, -6)     // 1

val doubled = numbers.map { x -> x * 2 }      // 2

val tripled = numbers.map { it * 3 }          // 3

 result

Numbers: [1, -2, 3, -4, 5, -6]
Doubled Numbers: [2, -4, 6, -8, 10, -12]
Tripled Numbers: [3, -6, 9, -12, 15, -18]

 

3. any, all, none

: 셋은 Boolean 을 return 한다.

람다로 받은 식을 만족하는 element 가 

any : 하나라도 true이면 true

all : 전부 true 이면 true

none : 하나도 없으면 true

를 return 한다.

 

any 만 예시를..

val numbers = listOf(1, -2, 3, -4, 5, -6)            // 1

val anyNegative = numbers.any { it < 0 }             // 2

val anyGT6 = numbers.any { it > 6 }

 

result

Numbers: [1, -2, 3, -4, 5, -6]
Is there any number less than 0: true
Is there any number greater than 6: false

 

 

모든 코드는 위 출처 사이트에서 확인할 수 있고

Kotlin Playground 에서 편집도 해볼 수 있다...

 

 

728x90
728x90

나는 C++로 상속을 배웠는데

개념적으로 너무 새롭거나 하기보다는 비슷하게느껴졌다.

 

코틀린 상속의 특징

 

1. 클래스도 메서드도 모두 상속 불가(final) 가 Default

open 을 붙여주면 상속가능

 

2. override 시 override 라고 앞에 붙여줌

 

3. 클래스 선언 시 부모클래스 뒤에 파라미터가 없으면 기본 생성자가 호출되고 파라미터를 넘길 수 도 있다.

 

 

실습해본 코드

 

Inheritance.kt

class Inheritance {
	// 1
    class Human()        // default : final 상속불가
    open class Animal(val species : String, val name : String)     // 상속가능
    {
        open fun whoAreYou() {
            println("I am $name, a $species")
        }
    }

	// 2, 3
    class Dog(name : String) : Animal(species = "Dog", name = name)

    class Cat(name: String) : Animal(species = "Cat", name = name)
    {
        override fun whoAreYou() {
            println("I am $name, a $species Meow meow")
        }
    }

}

 

Main.kt

import Inheritance

fun main() {
    val lola = Inheritance.Dog("Lola")
    lola.whoAreYou()
    val inky = Inheritance.Cat("Inky")
    inky.whoAreYou()
}

 

 

출처 : https://play.kotlinlang.org/byExample/01_introduction/07_Inheritance

728x90
728x90

위 에러는 non-null 로 정해진 함수 파라미터에 null 이 들어갔을 때 발생하는 에러이다.

본인이 작성한 함수나 API 에 input 이 non-nullable 인데 null 을 넣었는지 확인해보면 된다...

 

일부러 에러를 유도해보았음

        var neverNull: String = "This can't be null"
        // Default : Non-nullable

        neverNull = null
        // This line causes error
        // "Null can not be a value of a non-null type String"

:String 을 넣지 않아도 위 코드는 에러를 유도한다. non-nullable 이 default 이므로....

 

에러를 없애려면

var nullable : String? = "You can keep null here"
nullable = null

선언 시 자료형 뒤에 ? 붙여주면 됨..

 

 

 

Null Safety 간단 정리

 

1. 코틀린 변수의 default설정은 모든 변수에 null 을 assign 할 수 없다는 것이다.

 

2. null 을 assign 하기 위해서는 ?를 더해주어야 한다.

 

3. 함수 인풋인자로도 nullable / non-nullable 을 명시할 수 있다.

역시 default 는 non-nullable

non-nullable 인자가 들어가는 자리에 nullable 변수를 넣으면 Type Mismatch Error가 발생한다.

 

4. 조건문을 이용한 null tracking 도 가능하다.

 

직접 작성해 본 예시 코드 전문

 

class NullSafety {
    fun example(): Unit{
        var neverNull: String = "This can't be null"
        // Default : Non-nullable

        //neverNull = null
        // This line causes error
        // "Null can not be a value of a non-null type String"

        var nullable : String? = "You can keep null here"
        nullable = null

        println("var neverNull : String")
        println(isItNull(neverNull))
        println("var nullable : String?")
        println(isItNull(nullable))
    }


    // working with Nulls
    // Null tracking using condition
    fun isItNull(maybeString:String?) : String {
        if (maybeString != null)
        {
            return "\t\"$maybeString\"\nIt is not Null"
        } else {
            return "It is Null"
        }
    }
    
}

 

Main.kt

import NullSafety

fun main() {
    NullSafety().example()
}

 

 

출처는 공식사이트의 Kotlin Examples 

https://play.kotlinlang.org/byExample/01_introduction/04_Null%20Safety

728x90
728x90

이 외딴글을 보는 사람이 있다면

나처럼 아무것도 모르고 길을 잃어 미쳐버릴 사람일테니

바쁘신분들은 맨밑으로 스크롤....

 

 

<쓸데없는 얘기>

나는 코딩1년차 코린이

짬짬히 코틀린을 공부한지 2달여가 되었다.

그간 날 괴롭힌 것은 코틀린 자체가 아닌 IntelliJ이다.....

공부하려고 책을 샀다가... 프로젝트 생성화면이 일치하지 않아 대충 비슷하게 해봤더니 

프로젝트 생성하자마자 오류가 터짐

그래서 열심히 구글링했지만 잘 모르겠음

결국 영어가 너무 싫지만 젯브레인즈 헬프페이지를 따라감

www.jetbrains.com/help/idea/2020.3/create-your-first-kotlin-app.html

 

Tutorial: Create your first Kotlin application - Help | IntelliJ IDEA

 

www.jetbrains.com

또 안됨 ㅠㅠㅠ 왜나만 안되는거야.... 니네 하란대로 하잖아....

IntelliJ도 재설치해보고 Java도 재설치해보고 그랬다...

 

근데 여기 뒤적이다가 JetBrains Academy 프로그램이 잘 되어있는것도 같고 

아무래도 공식적인 가이드라 좋을거같아서 여기 프로그램을 시작해봄

원래 이론이랑 퀴즈정도 있는줄 알았는데 코드작성해보는 실습도있음!

이건 또 됨ㅋㅋㅋㅋ 야!!!!

(IntelliJ랑 연동해서 코드쓰고 채점받고 함.... 그니까 빌드를 정상적으로 했다는것.... )

그리고 2달간 잘 해왔는데 

그 사이트에서 시키는거 말고 혼자 연습좀 해보려고 다시 빈 프로젝트를 만들었더니 

 

다시 아래와 같은 에러가 터짐

 

NoClassDefFoundError: org/jetbrains/kotlin/cli/common/PropertiesKt

 

What went wrong: org/jetbrains/kotlin/cli/common/PropertiesKt

 

블라블라... 

 

구글링해보니 JDK 1.8정도로 버전 변경하고 해결했다는 글들이...영어로..나옴

그래서 오픈JDK1.8.0을 설치했다

요기서>>  github.com/ojdkbuild/ojdkbuild

 

 

근데 왜 난 1.8로 했는데 안되냐고!!!!!

 

그거슨 Gradle JVM을 안바꿨기 때문이었다...

아래와 같이 1.8을 넣어주니 프로젝트가 만들어진다....


아...코틀린에서 다차원 배열 함수인수로 사용하는게 미숙해서 배열공부하려고한건데 이거하느라고 하루가 다갔음...

누구한테 뭘 알려줄 입장이 아니지만....(내가 뭘 한지도 모르겠음)

나중에 혹시 또 헤멜 나를 위해, 그리고 나처럼 영문모르고 구글링하고있을 동지가 있을까하는 마음에 

만들어야지 만들어야지 하던 티스토리 블로그를 만들고 써봤다.........

다음에는 JetBrains Academy 후기같은걸 써볼까봐...

 

 

728x90

+ Recent posts