1.함수 작성법
fun을 붙이고 parameter, 리턴 타입을 작성한다.
fun main(){
println(add(4,5))
}
//1. 함수
fun helloworld() : Unit {
println("hello world!")
}
//:Unit 아무것도 리턴 안할 때 안써도 됨
fun add(a : Int, b : Int) : Int{
return a+b
}
변수 타입을 작성할 때 a : Int의 형식을 사용한다.
main 함수만 실행되므로 helloworld 함수를 실행하기 위해서
main함수 안에 helloworld()를 작성해야 실행된다!
2. var과 val
val = value :변하지 않는 고유값
var = variable : 변주 가능
fun hi(){
val a : Int = 10
var b : Int = 9
//a=9 -->에러
b=20 //가능
}
또한 위의 경우 굳이 변수 타입을 작성할 필요 없다.
알아서 Int임을 인식한다.
string 타입일 경우
var e : String 방식으로 작성하면 된다
3. String template
fun main(){
val name = "Joyce"
val lastName = "Hong"
println("my name is ${name + lastName} I'm 23")
//중괄호를 쓰자 가독성을 위해
}
$이후에 작성된 코드는 변수명으로 사용 가능
만일 $를 문자 그대로 출력하고 싶다면 \(백슬래쉬) 사용
작성된 코드들 주석 처리할 시 ctrl + /
여러 줄로 주석처리 해야될 때 /**
4. 조건식
fun maxBy(a : Int, b: Int) : Int{
if (a > b){
return a
}else{
return b
}
}
fun maxBy2(a: Int, b: Int) : Int = if (a>b) a else b
둘 다 같은 조건식이다.
fun main(){
checkNum(1)
}
fun checkNum(score : Int){
when(score) {
0 -> println("this is 0")
1 -> println("this is 1")
2,3 -> println("this is 2 or 3")
else -> println("i don't know")
}
var b : Int = when(score){
1->1
2->2
else ->3
}
println("b : ${b}")
when(score){
in 90..100 -> println("you are genius")
in 10..80 -> println("not bad")
else -> println("okay")
}
}
kotlin에서 when문은 java의 switch문과 같다.
출력값
this is 1
b : 1
okay
cf)
expression vs statement
expression은 서술 과정이 있고 그에 대한 평가가 있는 반면
statement는 단순하게 명령하는 특징을 가진다 a=10등이 statement
5. array and list
(immutable) list 수정 불가능 vs mutable list 수정 가능
fun array(){
val array = arrayOf(1,2,3)
val list = listOf(1,2,3)
val array2 = arrayOf(1, "d", 3.4)
val list2 = listOf(1, "d", 11L)
array[0] = 3
list[0] = 2 //에러! list는 array와 다르게 수정 불가능
var result : Int = list.get(0)
val arrayList = arrayListOf<Int>()
arrayList.add(10)
arrayList.add(20)
}
arraylist는 수정가능한 mutable list
그냥 list는 수정 불가능
수정 가능한 리스트는 add나 remove 사용
6. 반복문 for while
val students = arrayListOf("joyce", "james", "jenny", "jennifer")
for (name in students){
println("${name}")
}
for ((index, name) in students.withIndex()){
println("${index+1}번째 학생: ${name}")
}
var sum : Int = 0
for (i in 1..10 step 2){
sum += i }
println(sum)
//i in 10 downTo 1
//i in 1 until 100 100제외
var index = 0
while(index < 10){
println("current index: ${index}")
index++
}
downTo는 거꾸로 인덱스 설정
kotlin 또한 ++를 사용한다.
7. Nullable NonNull
//NPE :Null pointer Exception
var name : String = "joyce"
var nullName : String? = null
//?하나 추가하면 null을 넣을 수 있음
var nameInUpperCase : String = name.toUpperCase()
var nullNameInUpperCase : String? = nullName?.toUpperCase()
//nullName?의 의미 만약 null이 아니면 upper 실행 아니면 null로
-?의 의미: null 허용
-nullName?.toUpperCase() ?->null이면 그냥 넘어가고 null이 아니면 대문자로
결국 null을 허용한다는 맥락 속!
// ?: 엘비스 연산자
val lastName : String? = "Hong"
val fullName : String = name + " "+ (lastName?: "No last name")
println(fullName.toUpperCase())
?: ->엘비스 연산자
(lastName?: "No last name")에서 ?:
만약 lastName이 null이라면 No last name을 대신 할당함
val mNotNull : String? = str!!
//str이 null일리 없어!
val upper = mNotNull?.toUpperCase()
!! -> null이 될 수 없다는 코드
str!! str은 null이 될 수 없다
val email : String? = "joycehongxxxx@nana.com"
email?.let{
println("my email is ${email}")
let ->null이 아닐 때 실행되는 값/ null일 경우 실행안됨
8. class
open class Human constructor(val name : String = "Anonymous"){
//val name = name으로 써도 무방 위의 parameter에서 val을 빼고
//Anonymous는 default 값
/**
* class Person{
* public Person(String name){
* }
*
* public Person(String name, int age){
* this(name);
* }
*/
constructor(name : String, age : Int) : this(name){
println("my name is ${name}, ${age}years old")
}
init {
println("New human has been born!!")
}
fun eatingCake() {
println("this is so yummy")
}
open fun singASong(){
println("lalalala")
}
}
-위의 주석은 자바로 구현하는 코드이다
이 기능을 코틀린으로 구현하기 위해 constructor를 활용했다.
-open class로 작성해야 상속 가능하다(open fun도 마찬가지)
-val name : String = "Anonymous"가 생성자이다
만일 인스턴스를 만들때 parameter가 없는 경우 name = Anonymous로 된다
상속
class Korean : Human(){
override fun singASong(){//오버라이딩
super.singASong()
println("라라라")
println("my name is ${name}")
}
}
-오버라이딩 하는 경우 override fun ~로 작성해야 됨
korean class에서는 "lalalala" 대신 "라라라"로 표현하기 위해 오버라이딩을 하였음
-상속받으면서 Human의 name도 그대로 따라옴
Anonymous로 name 할당됨
로또 번호 추첨 토이 프로젝트 (0) | 2022.02.09 |
---|---|
BMI 계산기 안드로이드 앱 토이프로젝트 (0) | 2022.02.08 |
kotlin 2강 (0) | 2022.02.07 |
단말기 테스트 (0) | 2021.09.06 |
안드로이드 구조 (0) | 2021.09.03 |
댓글 영역