코드테스트 사이트:play.kotlinlang.org
참조:유튜브 디모의 코틀린
조건문과 비교연산자
fun main(){
//조건문,비교연산자
var a =11 //조건문 테스트 위해 변수 만들고 정수 대입
if(a > 10) {
println("a는 10보다 크다.") //조건문 하나면 중괄호 생략 가능
} else{
println("a는 10보다 작거나 같다.") //거짓일 경우의 조건문
}
a is int //자료형 맞는지 체크하는 연산자
a !is int //자료형 틀린지 체크
//when //다중비교문, 하나의 변수를 여러 개의 값과 비교 가능,
//다른 언어의 switch문을 개편
fun doWhen (a:Any){
//Any자료형:어떤 자료형이든 호환되는 코틀린 최상위 자료형!
when(a) {
//조건값들 나열
1-> println("정수 1입니다") //숫자
"Dimo"->println("디모의 코틀린 강좌입니다") //문자
is Long ->println("Long 타입입니다") //is 조건문
!is String -> println("String 타입입니다") //!is 조건문
else->println("어떤 조건값도 만족하지 않습니다")
//등호나 부등호는 사용 불가능하다!
}
}
}
<when을 조건에 맞는 동작을 하는 '조건문으로서' 이용한 경우>

-->string 타입이 아닙니다 라고 써야하는데 깜빡함
근데 왜 여러값을 비교한다면서 1도 string 타입이 아닌데 "string타입아닙니다"를 출력 안하지? 한번에 내부 구문 하나만 동작하는건가? 흐으음...
<when이 동작 대신 '값'을 반환하는 '표현식'으로서 동작하게 하기>


해당하는 거 있으면 when함수를 빠져나오는군요...
+var a,b=0,0 같은 변수 동시 초기화는 안되는건가? 흐음
반복문과 증감연산자
fun main() {
//조건형반복문:조건이 참인 경우 반복유지 ex.while, do...while
//범위형 반복문:반복 범위 정해 반복 수행
//증감연산자:++a,a++,--a,a--
//전위연산자:연산자가 포함된 구문에서 이미 증감된 수를 반영하여 연산 진행
//후위연산자:증가나 감소된 수를 해당구문에서 사용하지 않고 '다음구문'부터
//사용함
// 조건형 반복문
var a = 0
var b = 0
while(a < 5){
println(a++) //후위증가연산자, 화면에 출력된 후에야 증가값 반영
//5까지 증가하고 나서 조건문 확인했을때 while문 거짓되면
//반복 중단하고 다음 구문으로 넘어감(0~4까지 출력)
}
while(b < 5){
println(++b)//증가된 값 즉시반영해서 출력, 12345출력
}
var c=0
do //dowhile문, 최초한번은 조건없이 do에서 구문실행 후에 while조건체크
{
println(++c)
} while(c<5) //12345출력됨
//여기부터 범위형 반복문
for(i in 0..9 step 3){ //인덱스로 사용할 변수는 var등을 붙이지 않아도 됨
//0부터 9까지, step을 붙이면 3씩 증가!
print(i) //print는 println과 달리 줄 안떼고 붙여서 출력
}
for(j in 9 downTo 0 step 2){ //감소는 ..대신 downto 사용
print(j)
}
for (k in 'a'..'e'){while은 char타입에서도 증감 가능
print(k) //abcde출력됨
}
}
흐름제어와 논리연산자
fun main() {
//return:코드 흐름 제어하는 키워드중 하나
//'함수종료'하고 '값 반환'하는 역할
//또다른 키워드:break, continue
//break:반복문 내의 구문이실행되는 중간에 즉시 반복문 종료하고다음구문으로.
//continue:다음 반복조건으로 즉시 넘어감
for (i in 1..10) {
if (i==3) break
println(i) //3에서 반복문 종료, 1 2까지만 출력
}
for (i in 1..10) {
if (i==3) continue //i가 3일때 println 건너뛰고 for문으로 돌아가서
//다음 반복조건인 4 진행
println(i) //3빼고 1에서 10까지 출력
}
}
fun main() {
//코틀린에서 추가된 기능
//"다중 반복문"에서 break나 continue가 적용되는 반복문을
//label을 통해 지정
var a=0
for (i in 1..10){
for (j in 1..10){ //i 하나당 j 10번 반복
println (a++) //a값 0부터 99까지 출력됨
}
} //여기까지 고전반복문 예시
var b=0 //i랑 j 는 초기화 안해도 되는듯!
for (i in 1..10){
for (j in 1..10){
if(i==1&&j==2)break //i는1,j는2일때 반복문 탈출
println (b++) //2까지만 출력되어야하는데 90까지 출력됨(why??)
}
//또 체크 필요?? 수동적!!
}
}
//코틀린에서는 외부반복문에 '레이블이름'과 @(at)기호를 달고
//break 문에서 @과 레이블 이름을 달아주면
//레이블이 달린 반복문을 기준으로 '즉시' break!
loop@for (i in 1..10) {
for (j in 1..10) {
if(i==1&&j==2)break@loop //레이블이름@for문{}@레이블이름
println("i:$i, j:$j") //이런식으로 '가두는'건가...?
//따옴표 안에서 변수출력할때는 '$'를 앞에 붙여서 사용!
} //i:1, j:1까지만 출력돼서 break 의도한대로 작동했음을 알수있음!
}
}
fun main() {
//논리연산자:논리값을 연산하여 새로운 논리값을 도출할 때 쓰는 연산자!
//&&(and연산자),||(or연산자),!(not 연산자,뒤에 붙는 값 반전시킴)
println(true&&false) //false, 둘다 참이어야하는데 아니라서 false
println(true||false) //true, 하나라도 참이어서 true
println(!true) //false,반전됨
println(!false) //true, 반전됨
var a =6 //변수에 값 할당
var b =4
println(a>5 && b>5) //false
}
아 유튜브 생각보다 자세하긴 한데 5분짜리 강의도 정리하면서 들으려니까 오래걸린다.
31개중에 이제 7개들었는데 내가 공부를 안한 탓인가 ㅎㅋㅎㅋ
참고자료:유튜브 디모의 Kotlin 강좌
'코틀린 문법' 카테고리의 다른 글
9. 상속, 오버라이딩과 추상화 (0) | 2023.04.30 |
---|---|
8. 클래스, 생성자, 보조생성자 (0) | 2023.04.30 |
6. 형변환과 배열, 타입추론과 함수 (0) | 2023.04.30 |
5. 변수와 자료형-코틀린 (0) | 2023.04.30 |
4. 익명객체와 옵저버 패턴-코틀린 7일차 (0) | 2023.04.11 |