if문 기본 사용법
if문은 조건에 따라 분기하는 구문이다.
형식
if 문장 {
문장
} else if 조건문 {
문장
} else {
문장
}
- else if 와 else 구문은 생략할 수 있다.
1️⃣ else if
package main
import "fmt"
func main() {
temp := 33 // ❶
if temp > 28 { // ❷
fmt.Println("에어컨을 켠다")
} else if temp <= 3 {
fmt.Println("히터를 켠다")
} else {
fmt.Println("대기한다")
}
}
그리고 &&, 또는 ||
&&과 ||은 논리 연산자이다.
- &&은 AND를 의미
- ||은 OR을 의미
A와 B 두 boolean 값이 있을 때 &&는 양쪽이 모두 true인 경우에만 true가 되고 ||은 둘 중 하나만 true여도 true이다.
쇼트서킷 (Short-Circuit)
&& 연산은 좌변이 false이면 우변을 검사하지 않고 false 처리를 한다.
|| 연산 역시 좌변이 true이면 우변은 검사하지도 않고 false 처리를 한다. 이를 쇼트서킷(short-circuit)이라고 한다.
- 조건문 우변이 실행되지 않을 수 있기 때문에 이를 염두하여 코드를 작성해야 한다.
쇼트서킷 예제
//ch9/ex9.4/ex9.4.go
package main
import "fmt"
var cnt int = 0
func IncreaseAndReturn() int {
fmt.Println("IncreaseAndReturn()", cnt)
cnt++
return cnt
}
func main() {
if false && IncreaseAndReturn() < 5 { // ❶ 함수가 호출되지 않습니다.
fmt.Println("1 increase")
}
if true || IncreaseAndReturn() < 5 { // ❷ 함수가 호출되지 않습니다.
fmt.Println("2 increase")
}
fmt.Println("cnt:", cnt)
}
쇼트서킷에 의해서 IncreaseAndReturn() 함수가 호출되지 않는다.
이러한 특징 때문에 if문 조건에 들어가는 함수는 조건 검사만 하고 다른 로직은 실행하지 않는게 안전하다.
소괄호 ( ) 사용
소괄호를 활용하여 더욱 다양한 조건문을 쉽게 만들 수 있다.
if hasBooked() || (money > 200 && hasEmptySeat())
⇒ hasBooked() 함수 결과가 true면 조건이 true가 되고 hasBooked() 함수 결과가 false여도 money가 200보다 크고 hasEmptySeat() 함수 결과가 true이면 조건이 true가 된다.
중첩 if
if문 안에 if문을 중첩하여 사용할 수 있다.
if문은 계속 중첩할 수 있지만 중첩이 심할 경우 코드를 이해하기 힘들 수 있다. 되도록이면 3중첩 이상은 하지 않도록 권장한다.
if 초기문; 조건문
if문 조건 검사 전 초기문을 넣을 수 있다.
- 초기문은 검사에 사용할 변수를 초기화할 때 주로 사용된다.
- 초기문 자리에 하나의 구문이 올 수 있으며 끝에 ;를 붙여서 끝남을 표시한다.
형식
if 초기문; 조건문 {
문장
}
예제
if filename, success := UploadFile(); success {
fmt.Println("Upload Success", filename)
} else {
fmt.Println("Failed to upload")
}
- UploadFile() 함수를 실행하고 filename, success 변수에 저장한다.
- 그리고 함수 성공 여부에 따라 다른 메시지를 출력한다.
초기문에서 선언한 변수의 범위는 if문 안으로 한정된다
'Programming > Go' 카테고리의 다른 글
[Golang] for문 (0) | 2022.11.11 |
---|---|
[Golang] Switch문 (0) | 2022.11.06 |
[Golang] 상수 (Const) (0) | 2022.10.29 |
[Golang] 함수 (Function) (1) | 2022.10.29 |
[Golang] 연산자 (Operator) (0) | 2022.10.29 |