Skip to content
coooldoggy.dev

Kotlin 표준함수

Kotlin, TIL1 min read

1import java.io.File
2
3fun main() {
4// val menuFile = File("menu-file.txt")
5// menuFile.setReadable(true)
6// menuFile.setWritable(true)
7// menuFile.setExecutable(true)
8
9 /**
10 * apply : 반복되는 것들을 줄이기 위한 함수
11 * 참조 변수를 생략 가능 : 람다 내부에서 해당 수신자에 대한 모든 함수 호출이 가능하도록 apply가 사용범위를 설정해줌
12 *
13 */
14 val menuFile = File("menu-file.txt").apply {
15 setReadable(true)
16 setWritable(true)
17 setExecutable(true)
18 }
19
20 // val firstElement = listOf(1,2,3).first()
21 // val firstItemSquared = firstElement * firstElement
22
23 val firstItemSquared = listOf(1, 2, 3).first().let {
24 it * it
25 }
26
27// fun formatGreeting(vipGuest: String?): String{
28// return if (vipGuest != null){
29// "오랫만입니다, $vipGuest . 테이블이 준비되어 있으니 들어오시죠."
30// }else{
31// "저희 술집에 오신 것을 환영합니다. 곧 자리를 마련해 드리겠습니다."
32// }
33// }
34
35 fun formatGreeting(vipGuest: String?): String{
36 return vipGuest?.let {
37 "오랫만입니다, $it . 테이블이 준비되어 있으니 들어오시죠."
38 } ?: "저희 술집에 오신 것을 환영합니다. 곧 자리를 마련해 드리겠습니다."
39 }
40
41 /**
42 * run 함수 : 수신자 객체를 반환하지 않음
43 * 람다의 결과 true/false 를 반환함
44 */
45 val servesDragonBreath = menuFile.run {
46 readText().contains("Dragon's Breath")
47 }
48
49 /**
50 * run : 수신자에 대한 함수 참조 실행
51 */
52 fun nameIsLong(name: String) = name.length >= 20
53 "Madrigal".run(::nameIsLong)
54 "Polarcubis, Supreme Master of NyetHack".run(::nameIsLong)
55
56 fun playerCreateMessage(nameTooLong: Boolean): String{
57 return if (nameTooLong){
58 "Name is Too long. Please choose another name"
59 }else{
60 "Welcome, adventurer"
61 }
62 }
63
64 "Polarcubis, Supreme Master of NyetHack"
65 .run(::nameIsLong)
66 .run(::playerCreateMessage)
67 .run(::println)
68
69 /**
70 * also: run과 비슷하지만 람다의 결과 대신 수신자 객체를 반환함
71 *
72 */
73 var fileContents: List<String>
74 File("file.txt")
75 .also {
76 print(it.name)
77 }.also {
78 fileContents = it.readLines()
79 }
80
81 /**
82 * with
83 * 수신자 객체를 첫 번째 매개변수의 인자로 받음
84 */
85 val nameTooLong = with("Polarcubis, Supreme Master of NyetHack"){
86 length >= 20
87 }
88
89 /**
90 * takeif : 조건식이 true이면 수신자 객체 반환 ,false이면 null 반환
91 * takeUnless: false이면 수신자 객체 반환
92 */
93 val FileContents = File("myFile.txt")
94 .takeIf { it.canRead() && it.canWrite() }
95 ?.readText()
96}