코틀린 퀴즈 -2 제네릭, 주생성자, 확장함수, 익명함수, 엘비스 연산자
🔥 Problem 1
프로퍼티 1) dest 변수. 타입은 변경가능한 리스트. write 만 가능하다.
프로퍼티 2) src 변수. 타입은 변경 불가능한 리스트. read만 가능하다.
src로 받은 목록을 dest에 추가하는 append 제네릭 함수를 작성하라
open class Car { ... }
class sedan : Car() { ... }
class truck : Car() { ... }
val sedans : List<sedan> = ...
val trucks : List<truck> = ...
val cars : MutableList<Car> = ...
append(cars, sedans)
append(cars, trucks)
🔥 Problem 2
여기서 에러가 나는 코드는? (총 4줄)
val name : String
val address : String = null
val nullableString : String?
val nonNullableString : String = "Foo"
fun Address (a : String, b : String?, c : String) : String {...}
fun Code (a : String) : PostalCode ? { ... }
Address (null, null, "hello")
val postal :PostalCode = Code("adsf adf f f f f")
🔥 Problem 3
Happy 타입이며 한 번 할당되면 값을 변경하지 못하는 smile 변수가 있다.
해당 변수에 findHappy("Let's have a laugh") findHappy함수 결과를 대입하려한다.
그런데 findHappy함수가 널 값을 반환하는 경우 Happy.None값을대입하는코드를 작성하라
🔥 Problem 4
Employee 라는 주생성자를 만든다.
프로퍼티가 두개가 있는데 하나는 String 타입이고 이름은 name, 하나는 널값이 될 수 있는 Employee 타입이고 이름은 manager 이다.
managerName 의 함수를 만드는데 이 함수는 Employee를 파라미터 값으로 갖고 반환값은
해당 Employee의 manager의 name 이다. ( 확장함수 이용 ) -찬영
🔥 Problem 5
시연
🔥 Problem 6
EditText의 값을 Float 형태로 만들 때는 EditText.text.toString().toFloat()이라는 긴 코드를 통해 만들 수 있다.
하지만, 여러개의 EditText를 모두 Float 형태로 만들 때 쟤네들을 일일히 다 호출해주는 것은 불편하다.
이를 해결하여라. -시연
🔥 Problem 7
시연
답
🍀 Solution 1
fun <T> append (dest : MutableList<in T>, src : List<out T>){
dest.addAll(src)
}
🍀 Solution 2
1, 2 , 7, 8 줄 ERROR Code
val name : String
=> nonNullable. 즉, 초기화 해줘야 한다. val address : String = null
=> nonNullable. null을 대입할 수 없고 값을 대입해야한다.
Address (null, null, "hello")
=> 첫 번째 인자는 null 허용을 안했는데 null을 대입해서 오류 val postal : PostalCode = Code("adsf adf f f f f")
=> Code함수의 return 값이 nullable이다. 즉, null일 수 있다. 그렇다면 postal변수의 값도 nullable이여야 한다.
그러나 nonNuallable이기 때문에 불가능하다.
🍀 Solution 3
val smile : Happy = findHappy("Let's have a laugh") ?: Happy.None
🍀 Solution 4
🍀 Solution 5
🍀 Solution 6
fun EditText.convertFloat() {
this.text.toString().toFloat()
}
🍀 Solution 7