조건문
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
조건문은 프로그래밍에서 프로그램의 흐름을 제어하는 핵심적인 요소로, 다양한 종류와 구조를 가지고 있다. 가장 기본적인 형태는 `if-then-else` 문이며, C, C++, Java, Python, Ruby 등 대부분의 프로그래밍 언어에서 지원된다. C 계열 언어는 `if`, `else if`, `else` 키워드를 사용하여 조건을 구성하며, Python은 들여쓰기를 통해 코드 블록을 구분한다. Ruby는 `if` 문 자체가 값을 반환하는 표현식이며, `case` 문을 통해 다양한 패턴 매칭을 지원한다. 조건문은 패턴 매칭, 술어, 해시 기반 조건문, 논리 연산자를 이용한 의사 if 문 등 다양한 활용 기법을 통해 더욱 유연하게 사용될 수 있다. 한국어 프로그래밍 환경에서는 '만약', '그러면', '아니면' 등의 한국어 키워드를 사용하여 조건문을 자연어와 유사하게 표현할 수 있다.
조건문은 크게 `if-then-else` 구조와 `switch-case` 구조로 나뉜다.
2. 조건문의 종류와 기본 구조
`if-then-else` 문은 주어진 조건식을 평가하여 참이면 `then` 블록을, 거짓이면 `else` 블록을 실행하며, `else if`를 사용하여 여러 조건을 연속적으로 검사할 수 있다. C에서는 `if`를 사용하여 조건문을 만들고, `if`와 `else` 사이에 `else if`를 넣어 새로운 조건을 추가할 수 있다. C++자바 등도 같은 형식을 따른다.
`switch-case` 문 (일부 언어에서는 `case` 문이나 다방향 분기라고도 함)은 특정 변수나 식의 값을 여러 개의 상수와 비교하여 일치하는 `case` 블록을 실행한다. 일반적으로 일치하는 항목이 없는 경우 기본 작업(`else`, `otherwise`)을 수행하는 기능이 있다.
조건문은 부수 효과를 위해 실행되는 명령형 구문인 반면, 조건식은 값을 반환한다. 많은 프로그래밍 언어(예: C)는 별도의 조건문과 조건식을 가지고 있다. 순수 함수형 프로그래밍에서 조건식은 부수 효과가 없지만, 조건식을 지원하는 많은 언어(예: Lisp)는 조건부 부수 효과를 지원한다.
2. 1. If-then-else 문
`if-then-else` 문은 가장 기본적인 조건문 형태로, 대부분의 프로그래밍 언어에서 지원된다. 의사 코드 형태는 다음과 같다.
'''만약''' (부울 조건) '''그러면'''
:(결과)
'''그렇지 않으면'''
:(대안)
'''종료 만약'''
예를 들어:
'''만약''' 재고=0 '''그러면'''
:메시지= 새 재고 주문
'''그렇지 않으면'''
:메시지= 재고가 있습니다.
'''종료 만약'''
위 예제 코드에서 ''(부울 조건)''으로 표시된 부분은 내재적 값(예: `True` 또는 `False` 값 중 하나로 대체될 수 있음)을 갖지만 내재적 의미는 없는 조건부 ''식''을 구성한다. 반대로, 이 식, 이를 둘러싼 `If` 및 `Then`, 그리고 그 뒤에 오는 결과를 결합하면 내재적 의미(예: 일관된 논리 규칙 표현)는 있지만 내재적 값은 없는 조건부 ''문''이 된다.
인터프리터가 `If`를 찾으면 `x > 0`과 같은 부울 조건을 예상한다. 즉, "변수 x에는 0보다 큰 숫자가 들어 있습니다."라는 의미이며, 해당 조건을 평가한다. 조건이 `true`이면 `then` 다음에 나오는 문이 실행된다. 그렇지 않으면 실행은 다음 분기에서 계속된다. 즉, `else` 블록에서 계속되거나, `else` 분기가 없으면 `end If` 다음에 계속된다.
두 분기 중 하나가 실행된 후 제어는 `end If` 뒤의 지점으로 돌아간다. 초기 프로그래밍 언어, 특히 1980년대 홈 컴퓨터의 일부 BASIC 방언에서는 `if–then` 문이 `GOTO` 문(분기 명령에 해당)만 포함할 수 있었다. 이로 인해 읽기 어려운 프로그래밍 스타일인 스파게티 프로그래밍이 생겨났고, 이 스타일의 프로그램은 ''스파게티 코드''라고 불렸다. 그 결과, `if` 문 내의 구문 블록에 (사실상) 임의의 구문을 넣을 수 있는 구조적 프로그래밍이 인기를 얻어, 대부분의 BASIC 프로그래밍 환경에서도 표준이 되었다. 이러한 메커니즘과 원리는 더 오래되었지만 더 발전된 ALGOL 계열 언어를 기반으로 했으며, 파스칼 및 모듈라-2와 같은 ALGOL 유사 언어는 수년 동안 현대 BASIC 변형에 영향을 미쳤다. `if–then` 문에서 `GOTO` 문만 사용하여 스파게티 코드가 아니고 구조적 프로그래밍 언어로 작성된 프로그램만큼 구조화되고 읽기 쉬운 프로그램을 작성하는 것이 가능하지만, 구조적 프로그래밍은 이를 더 쉽게 만들고 강제한다. 위의 예와 같은 구조적 `if–then–else` 문은 구조적 프로그래밍의 핵심 요소 중 하나이며, C, Java, 자바스크립트 및 Visual Basic과 같은 대부분의 인기 있는 고급 프로그래밍 언어에 존재한다.
중첩된 `if-then-else` 문에서 `else` 키워드가 어떤 `if` 문에 해당하는지 모호해지는 "댕글링 else" 문제가 발생할 수 있다. 이는 언어에 따라 `end if` 문이나 중괄호(`{}`)를 사용하여 해결한다.
2. 2. Else if 문
C에서는 `if`를 사용하여 조건문을 만들고, `if`와 `else` 사이에 `else if`를 넣어 새로운 조건을 추가할 수 있다. C의 영향을 받은 C++, 자바 등도 같은 형식을 따른다.[1]
```c
#include
int main(void){
int a = 2, c = 5;
if(a > c){
printf("a는 c보다 크다.");
} else if(a < c) {
printf("a는 c보다 작다.");
} else {
printf("a는 c와 같다.");
}
return 0;
}
```
위 소스는 `else if`를 추가하여 만든 조건문의 예시이다.
`else if`를 사용하면 여러 조건을 효율적으로 연결할 수 있다. 참으로 판명된 첫 번째 조건 다음의 구문만 실행되고, 다른 모든 구문은 건너뛴다.[1]
```
'''if''' 조건 '''then'''
''-- 구문''
'''elseif''' 조건 '''then'''
''-- 더 많은 구문''
'''elseif''' 조건 '''then'''
''-- 더 많은 구문;''
...
'''else'''
''-- 다른 구문;''
'''end if''';
```
예를 들어, 품목에 대해 최대 30%까지 할인을 제공하는 상점이 있다면 다음과 같이 나타낼 수 있다.
```
'''if''' 할인 < 11% '''then'''
print (당신은 30달러를 지불해야 합니다)
'''elseif''' 할인<21% '''then'''
print (당신은 20달러를 지불해야 합니다)
'''elseif''' 할인<31% '''then'''
print (당신은 10달러를 지불해야 합니다)
'''end if''';
```
위의 예에서 할인이 10%인 경우 첫 번째 `if`문이 참으로 평가되고 "당신은 30달러를 지불해야 합니다"가 출력되며, 첫 번째 `if`문 아래의 다른 모든 구문은 건너뛴다.[1]
PHP는 중괄호 또는 콜론 구문에 대해 `elseif` 키워드[1]를 사용하고, Perl은 `elsif` 키워드를 제공한다. Python은 특수 키워드 `elif`를 사용한다. Visual Basic과 같은 BASIC의 일부 구현[2]도 `ElseIf`를 사용한다. 마찬가지로 이전 UNIX 셸(나중에 POSIX 셸 구문[3]에 수집됨)도 `elif`를 사용한다.
그러나 Simula, Pascal, BCPL 및 C와 같이 Algol에서 직접 파생된 많은 언어에서는 `else if` 구문에 대한 특수 구문이 없으며, Java, ECMAScript 등과 같은 C의 많은 구문 파생어에도 없다.
2. 3. Switch-case 문
`switch-case` 문은 특정 변수나 식의 값을 여러 상수와 비교하여 각 값에 해당하는 코드를 실행하는 제어 흐름 문이다. 일부 프로그래밍 언어에서는 `case` 문 또는 다방향 분기라고도 한다.
`switch` 문은 일반적으로 다음과 같은 특징을 갖는다.
다음은 여러 프로그래밍 언어에서 `switch-case` 문을 사용하는 예시이다.
다양한 프로그래밍 언어들은 조건문을 구현할 때 조금씩 다른 문법과 특징을 보인다.
3. 프로그래밍 언어별 조건문 구현
프로그래밍 언어 `if` 지원 여부 `else` 지원 여부 `else if` 지원 여부 switch 지원 여부 산술 if 지원 여부 패턴 매칭 지원 여부 에이다 예 예 예 예 아니오 아니오 APL 아니오 예 예 예 아니오 아니오 Bash 셸 예 예 예 예 아니오 예 C, C++ 예 예 아니오 예[38] 아니오 아니오 C# 예 예 아니오 예 아니오 아니오 COBOL 예 예 아니오 예 아니오 아니오 에펠 예 예 예 예 아니오 아니오 F# 예 예 예 아니오 아니오 예 포트란 90 예 예 예 예 예[16] 아니오 Go 예 예 아니오 예 아니오 아니오 Haskell 예 예 아니오 아니오 아니오 예 Java 예 예 아니오 예[14] 아니오 아니오 자바스크립트 예 예 아니오 예[15] 아니오 아니오 Mathematica 예 예 예 예 아니오 예 오베론 예 예 예 예 아니오 아니오 Perl 예 예 예 예 아니오 아니오 PHP 예 예 예 예 아니오 아니오 파스칼, 오브젝트 파스칼 (델파이) 예 예 아니오 예 아니오 아니오 파이썬 예 예 예 아니오 아니오 예 퀵베이직 예 예 예 예 아니오 아니오 루비 예 예 예 예 아니오 예 Rust 예 예 예 아니오 아니오 예 스칼라 예 예 아니오 예 아니오 예 SQL 예 예 예 예 아니오 아니오 Swift 예 예 예 예 아니오 예 Tcl 예 예 예 예 아니오 예 비주얼 베이직, 클래식 예 예 예 예 아니오 아니오 비주얼 베이직 .NET 예 예 예 예 아니오 아니오 윈도우 파워셸 예 예 예 예 아니오 아니오 3. 1. C 계열 언어 (C, C++, Java, C#, JavaScript)
C는 `if`를 사용하여 조건문을 만든다. `if`의 조건이 참이 아닐 때 수행할 동작은 `else` 문에서 지정 가능하며, `if`와 `else` 사이에 `else if`를 통해 새로운 조건을 넣을 수 있다. C의 영향을 받은 C++, 자바 등도 같은 형식을 따른다.[1]
C 언어 예시:
#include
int main(void){
int a = 2, c = 5;
if(a == c){
printf("a는 c와 같다.");
}
else {
printf("a는 c와 다르다.");
}
return 0;
}
위 코드는 삼항 연산자를 사용하여 다음과 같이 더 간결하게 표현할 수 있다.
#include
int main(void){
int a = 2, c = 5;
a == c ? printf("a는 c와 같다.") : printf("a는 c와 다르다.");
return 0;
}
하지만 삼항 연산자는 `else if`처럼 여러 조건을 처리할 수 없다.[1]
`else if`를 추가한 C 언어 조건문의 예시는 다음과 같다.
#include
int main(void){
int a = 2, c = 5;
if(a > c){
printf("a는 c보다 크다.");
} else if(a < c) {
printf("a는 c보다 작다.");
} else {
printf("a는 c와 같다.");
}
return 0;
}
C에서는 조건식으로 `int`형을 사용하며, 0은 거짓, 0이 아닌 값은 참으로 간주된다.[17] C99 이전에는 참/거짓만을 다루는 자료형이 없었기 때문에 `int`형으로 이를 대신했다. 비교식의 결과는 `int`형이며, 0 또는 1의 값을 가진다.[18]
C++(C++)는 C와 유사하지만, `false`(0) 또는 `true`(1) 값만을 가질 수 있는 `bool`형을 명시적으로 지원한다.[23] 조건식에서는 `bool`형으로 암묵적 변환이 가능한 식을 사용할 수 있다. C++에서는 조건식 내에서 변수 선언이 가능하며, 선언된 변수의 유효 범위는 해당 `if-else` 문 블록 내로 제한된다.[24]
C++17(C++17)에서는 초기화와 조건식을 분리한 if 문 구문이 도입되었다.[25]
자바(Java)의 `if` 문은 조건식으로 `boolean` 형만 허용한다.[26] C++과 달리 조건식 내 변수 선언은 불가능하다.
C#은 Java와 매우 유사하며, `if` 문은 조건식으로 `bool` 형만 허용한다.[27][28]
자바스크립트는 C 언어와 유사한 if-else 문을 사용한다. 부울 값은 예약어 `if`와 왼쪽 중괄호 사이에 괄호 안에 허용된다.[15]
```javascript
if (Math.random() < 0.5) {
console.log("You got Heads!");
} else {
console.log("You got Tails!");
}
```
`else` 및 `else if` 문은 아래와 같이 필요에 따라 이전 문의 중괄호 뒤에 여러 번 연결할 수도 있다.
```javascript
var x = Math.random();
if (x < 1/3) {
console.log("One person won!");
} else if (x < 2/3) {
console.log("Two people won!");
} else {
console.log("It's a three-way tie!");
}
3. 2. Python
파이썬은 `if`, `elif` (else if), `else` 키워드를 사용하여 조건문을 구현한다. 코드 블록은 들여쓰기로 구분된다.[1] 파이썬은 다른 언어와 달리 중괄호 대신 들여쓰기를 사용하여 코드 구조를 표현하기 때문에, `else`와 `if`를 반복적으로 사용하면 모든 조건 후에 들여쓰기가 증가해야 한다. 따라서 가독성을 높이기 위해 `elif` 키워드를 사용한다.[1]
```python
if 할인 < 0.11:
print("당신은 30달러를 지불해야 합니다")
elif 할인 < 0.21:
print("당신은 20달러를 지불해야 합니다")
elif 할인 < 0.31:
print("당신은 10달러를 지불해야 합니다")
else:
print("할인율이 너무 높습니다.")
```
위의 예제에서 `할인`이 0.10 (10%) 이라면 첫 번째 `if`문이 참으로 평가되어 "당신은 30달러를 지불해야 합니다"가 출력되고, 그 아래의 모든 구문은 건너뛴다.
파이썬에는 별도의 `switch-case` 문이 없다. 하지만 딕셔너리나 `if-elif-else` 체인을 사용하여 `switch-case` 문과 유사한 기능을 구현할 수 있다.
- 표에서 ``, `` 템플릿은 제거했다.
- `Python영어` 템플릿을 `파이썬`으로 수정했다.
- 소스코드의 주석을 제거했다.
3. 3. Ruby
루비에서 `if` 문은 다음과 같이 사용된다.```ruby
if 조건식 (then)
참 문
end
```
`then`은 생략 가능하다. 조건식이 참일 경우 `참 문`이 실행된다.
`if`, `elsif` (else if), `else` 키워드를 사용하여 여러 조건을 결합할 수 있다.
```ruby
if 할인 < 11 then
print (당신은 30달러를 지불해야 합니다)
elseif 할인 < 21 then
print (당신은 20달러를 지불해야 합니다)
elseif 할인 < 31 then
print (당신은 10달러를 지불해야 합니다)
end
```
위 예시에서 `할인`이 10%라면 첫 번째 `if` 문이 참으로 평가되어 "당신은 30달러를 지불해야 합니다"가 출력되고, 그 아래의 모든 구문은 건너뛴다.[1]
참과 거짓에 따라 실행문을 변경하려면 다음과 같이 `else`를 사용한다.
```ruby
if 조건문 (then)
참 문
else
거짓 문
end
```
루비에서 `if` 문은 표현식(expression)이며, 조건이 성립되는 쪽의 절에서 마지막으로 평가된 식의 값을 반환한다.
`case` 문은 정규 표현식 등 다양한 패턴 매칭을 지원한다.[16]
3. 4. Pascal
파스칼에서 조건문은 다음과 같이 사용한다.```pascal
if 조건식 then
then 절
```
참과 거짓 모두에 따라 분기할 때는 다음과 같이 사용한다.
```pascal
if 조건식 then
then 절
else
else 절
```
예시:
```pascal
if na > nb then nc := na else nc := nb
```
then 절과 else 절에는 1개의 문 또는 `begin` - `end`로 묶인 복문을 작성한다.
파스칼은 `if`, `then`, `else` 키워드를 사용하며, `begin`과 `end`로 코드 블록을 명확히 구분한다. 또한, `case` 문을 지원한다.
```pascal
case someChar of
'a': actionOnA;
'x': actionOnX;
'y','z':actionOnYandZ;
else actionOnNoMatch;
end;
3. 5. 기타 언어
- '''Lisp'''
Lisp에서 `if`는 함수처럼 보이지만, 실인수가 평가되지 않는 특수 형식(매크로)이다.[1] 참/거짓 값은 `nil`이라는 이름이나 내용이 없는 괄호 `()`로 표현되는 빈 리스트가 거짓으로 취급되며, 다른 값은 참으로 취급된다. then절과 else절은 모두 식이다.
참일 때만 실행할 때
```lisp
(if 조건식 then절)
```
참과 거짓 모두로 분기할 때
```lisp
(if 조건식 then절 else절)
```
Lisp에는 `cond`라는, 동등한 기능을 실현할 수 있는 특수 형식도 있다. 사양이나 구현에 따라, `if`가 `cond`로 전개되는 매크로일 수도 있고, `cond`가 `if`로 전개되는 매크로일 수도 있다.
- '''Haskell'''
하스켈 98에는 ''if 문''이 없고, ''if 표현식''만 있으며, 모든 표현식은 값을 가져야 하므로 `else` 부분이 필수이다.[4] 다른 언어에서 조건문으로 표현될 로직은 일반적으로 재귀 함수에서 패턴 매칭으로 표현된다.
하스켈은 느긋하게 계산되므로, ''if''와 같은 제어 구조를 일반적인 표현식으로 작성할 수 있다. 느긋한 계산은 ''if 함수''가 조건과 적절한 분기만 평가할 수 있음을 의미한다(엄격한 언어는 세 가지 모두 평가합니다).
- '''Visual Basic'''
Visual Basic 및 일부 다른 언어에서는 `IIf`라는 함수가 제공되며, 이를 조건식으로 사용할 수 있다. 그러나 실제 조건식처럼 동작하지는 않는데, 참과 거짓 분기가 항상 모두 평가되기 때문이다. 단지 그 중 하나의 결과가 버려지고, 다른 하나의 결과가 IIf 함수에 의해 반환될 뿐이다.
Visual Basic(VB), Visual Basic for Applications(VBA), Visual Basic .NET(VB.NET)은 복문에도 대응한다.
참일 때만 실행할 때
```vb
If 조건식 Then
참 문장
End If
```
참과 거짓으로 실행 문장을 변경할 때
```vb
If 조건식 Then
참 문장
Else
거짓 문장
End If
```
참 문장 및 거짓 문장이 한 줄일 경우에는 BASIC과 같은 형식(단일 행 구문)으로 작성할 수도 있다.
- '''Fortran'''
포트란 77까지, 포트란 언어는 인자 ''e''가 0보다 작은지, 0과 같은지, 0보다 큰지에 따라 세 개의 레이블 중 하나로 분기하는 산술 ''if'' 문을 가지고 있었다.[11] 이는 포트란에서 가장 초기의 조건문이었다.
다음은 Fortran77 이후의 논리 IF문의 경우이다. 한 줄인 경우
```fortran
if (조건식) 참 문
```
여러 줄에 걸쳐 있는 경우
```fortran
if (조건식1) then
조건식1이 참인 경우 여기부터
여기까지의 프로그램이 실행된다(여러 줄).
else if (조건식2) then
조건식2가 참인 경우, 단 이미 조건식1이 성립하는 경우는 제외, 여기부터
여기까지의 프로그램이 실행된다(여러 줄).
else
모든 조건 중 어느 것에도 해당하지 않는 경우, 여기부터
여기까지의 프로그램이 실행된다(여러 줄).
end if
```
- '''SQL'''
SQL에는 SQL-92에 도입된 `CASE` 표현식을 사용하여 조건부 로직을 구현한다. "검색된 `CASE`" 표현식은 `if ... else if ... else`와 같이 작동하고, "단순한 `CASE`" 표현식은 switch 문처럼 작동한다.
4. 조건문의 활용과 고급 기법
조건문은 프로그래밍에서 자주 사용되며, 다양한 활용법과 고급 기법들이 존재한다.
술어 (Predication)조건적 실행(predication)은 명령 집합 아키텍처의 기능으로, 제어 흐름을 바꾸는 대신 조건에 따라 명령을 실행하게 한다.[1] 이는 조건 분기 명령의 대안으로 사용된다.
해시 기반 조건문연관 배열(해시 테이블)을 사용하는 파이썬, 펄, PHP, Objective-C 등에서는 이를 활용해 조건부 할당을 구현한다.[13] 익명 함수를 지원하거나 함수를 변수 참조에 할당할 수 있는 언어에서는 해시를 디스패치 테이블로 사용하여 조건부 흐름을 제어할 수 있다.
논리 연산자를 이용한 의사 If 문단락 평가를 지원하는 언어에서는 논리곱(`&&`) 및 논리합(`||`) 연산자를 사용하여 의사 `if` 문을 만들 수 있다.
- `&&` 연산자: `좌변 && 우변`은 `If (좌변) { 우변 }`과 같다. (좌변이 참일 때만 우변 평가)
- `||` 연산자: `좌변 || 우변`은 `If (Not 좌변) { 우변 }`과 같다. (좌변이 거짓일 때만 우변 평가)
예를 들어 MS-DOS나 Windows의 배치 파일에서는 `&&`와 `||`를 사용한다.[37]
: CHDIR C:\HOGE || ECHO 폴더를 찾을 수 없습니다
(CHDIR 명령어가 실패하면 ECHO 명령어가 실행된다)
자바스크립트 등에서도 논리 연산자를 의사 If 문으로 활용할 수 있다.
4. 1. 패턴 매칭
패턴 매칭은 `if-then-else` 및 `case` 문의 대안으로, 함수형 프로그래밍 언어에서 주로 사용된다. 값뿐만 아니라 데이터 패턴에 따라 간결하게 분기할 수 있다.[4]하스켈에서는 패턴 매칭이 자주 사용된다. 예를 들어, 다음은 리스트의 각 요소에 함수를 적용하는 `map` 함수의 하스켈 코드이다.
```haskell
map _ [] = []
map f (h : t) = f h : map f t
```
이 코드는 리스트가 비어있는 경우와 비어있지 않은 경우 두 가지 패턴에 따라 함수를 정의한다.
OCaml에서도 패턴 매칭을 사용할 수 있다. 다음은 과일 종류에 따라 다른 동작을 하는 코드 예시이다.
```ocaml
match fruit with
| "apple" -> cook pie
| "coconut" -> cook dango_mochi
| "banana" -> mix;;
```
스칼라, Rust, Swift 등 다양한 언어에서도 패턴 매칭을 지원한다.
다음 표는 각 언어의 패턴 매칭 지원 여부를 나타낸다.
| 프로그래밍 언어 | 패턴 매칭 |
|---|---|
| Ada | 아니오 |
| APL | 아니오 |
| Bash 셸 | 예 |
| C, C++ | 아니오 |
| C# | 아니오 |
| COBOL | 아니오 |
| 에펠 | 아니오 |
| F# | 예 |
| 포트란 90 | 아니오 |
| Go | 아니오 |
| Haskell | 예 |
| Java | 아니오 |
| ECMAScript (자바스크립트) | 아니오 |
| Mathematica | 예 |
| 오베론 | 아니오 |
| Perl | 아니오 |
| PHP | 아니오 |
| 파스칼, 오브젝트 파스칼 (델파이) | 아니오 |
| 파이썬 | 예 |
| 퀵베이직 | 아니오 |
| 루비 | 예[16] |
| Rust | 예 |
| 스칼라 | 예 |
| SQL | 아니오 |
| Swift | 예 |
| Tcl | 예 |
| 비주얼 베이직, 클래식 | 아니오 |
| 비주얼 베이직 .NET | 아니오 |
| 윈도우 파워셸 | 아니오 |
4. 2. 술어 (Predication)
조건 분기 명령에 대한 대안은 조건적 실행(predication)이다. 조건적 실행은 명령 집합 아키텍처의 기능으로, 제어 흐름을 바꾸는 대신 명령을 조건에 따라 실행할 수 있게 한다.[1]4. 3. 해시 기반 조건문
연관 배열 (해시 테이블)을 사용하는 파이썬, 펄, PHP, Objective-C 등의 프로그래밍 언어에서는 이를 활용하여 조건부 할당을 구현하는 것이 일반적이다.[13]익명 함수를 지원하거나 프로그래머가 명명된 함수를 변수 참조에 할당할 수 있는 언어에서는 해시를 디스패치 테이블로 사용하여 조건부 흐름을 제어할 수 있다.
4. 4. 논리 연산자를 이용한 의사 If 문
단락 평가를 지원하는 언어에서는 논리곱(`&&`) 및 논리합(`||`) 연산자를 사용하여 의사 `if` 문을 만들 수 있다.`&&`를 논리곱 연산자라고 하면,
: 좌변 && 우변
이라는 논리식에서 좌변이 참이 아니면 우변을 평가하지 않는 언어(단락 평가)에서는, 이것을
: If (좌변) { 우변 }
과 등가로 간주할 수 있다. 즉 좌변이 조건문이고 우변이 참 문이 되는 것이다.
마찬가지로 `||`를 논리합 연산자라고 하면,
: 좌변 || 우변
은
: If (Not 좌변) { 우변 }
과 등가가 되어, 좌변이 거짓일 때만 우변이 실행된다.
예를 들어 MS-DOS나 Windows의 배치 파일에서는 조건부 처리 심볼 `&&`와 `||`가 있다[37]。
: CHDIR C:\HOGE || ECHO 폴더를 찾을 수 없습니다
(만약 CHDIR 명령어가 실패하면 ECHO 명령어가 실행된다)
자바스크립트 등 언어에 따라서는, 이처럼 논리곱 연산이나 논리합 연산을 의사 If문에 사용할 수 있다.
참조
[1]
문서
PHP elseif syntax
http://php.net/manua[...]
[2]
문서
Visual Basic ElseIf syntax
https://docs.microso[...]
[3]
문서
POSIX standard shell syntax
http://pubs.opengrou[...]
[4]
문서
Haskell 98 Language and Libraries: The Revised Report
http://www.haskell.o[...]
[5]
문서
If-then-else Proposal on HaskellWiki
http://haskell.org/h[...]
[6]
웹사이트
Efficient C Tips #6 – Don't use the ternary operator « Stack Overflow
http://embeddedgurus[...]
Embeddedgurus.com
2012-09-07
[7]
웹사이트
New Control Structures
https://wiki.tcl-lan[...]
Tcler's wiki
2020-08-21
[8]
웹사이트
uplevel manual page
https://www.tcl.tk/m[...]
www.tcl.tk
2020-08-21
[9]
웹사이트
if manual page
http://www.tcl.tk/ma[...]
www.tcl.tk
2020-08-21
[10]
웹사이트
If and if let expressions
https://doc.rust-lan[...]
2020-11-01
[11]
웹사이트
American National Standard Programming Language FORTRAN
http://www.fortran.c[...]
2007-09-09
[12]
웹사이트
VisualWorks: Conditional Processing
http://wiki.cs.uiuc.[...]
2007-09-09
[13]
웹사이트
Pythonic way to implement switch/case statements
http://codingstylegu[...]
2015-01-19
[14]
문서
Java Language Specification, 3rd Edition
http://java.sun.com/[...]
Java.sun.com
[15]
Webarchive
ECMAScript Language Specification, 5th Edition
https://web.archive.[...]
Ecma-international.org
2015-04-12
[16]
웹사이트
Pattern Matching
https://docs.ruby-la[...]
[17]
문서
ISO/IEC 9899:1999 §6.8.4.1 The if statement
https://www.dii.uchi[...]
[18]
문서
比較演算子 - cppreference.com (C)
https://ja.cpprefere[...]
[19]
문서
Fatal Error C1061 | Microsoft Learn
https://learn.micros[...]
[20]
문서
ISO/IEC 9899:1999 §5.2.4.1 Translation limits
https://www.dii.uchi[...]
[21]
문서
Compiler Warning (level 4) C4706 | Microsoft Learn
https://learn.micros[...]
[22]
문서
Diagnostic flags in Clang — Clang git documentation
https://clang.llvm.o[...]
[23]
문서
比較演算子 - cppreference.com (C++)
https://ja.cpprefere[...]
[24]
문서
明示的な型変換演算子のオーバーロード - cpprefjp C++日本語リファレンス
https://cpprefjp.git[...]
[25]
문서
if文とswitch文の条件式と初期化を分離 - cpprefjp C++日本語リファレンス
https://cpprefjp.git[...]
[26]
문서
Java言語更新 - instanceofのパターン・マッチング | Java SE 16
https://docs.oracle.[...]
[27]
문서
Dissecting the pattern matching in C# 7 - Developer Support
https://devblogs.mic[...]
[28]
문서
第3回 型による分岐の改良:特集:C# 7の新機能詳説(2/2 ページ) - @IT
https://atmarkit.itm[...]
[29]
문서
Using If...Then...Else statements (VBA) | Microsoft Learn
https://learn.micros[...]
[30]
문서
If...Then...Else ステートメント - Visual Basic | Microsoft Learn
https://learn.micros[...]
[31]
문서
IF 関数 - Microsoft サポート
https://support.micr[...]
[32]
문서
Logical Functions | LibreOffice Help
https://help.libreof[...]
[33]
문서
IF - Google ドキュメント エディタ ヘルプ
https://support.goog[...]
[34]
문서
IFS function | LibreOffice Help
https://help.libreof[...]
[35]
문서
IFS 関数 - Microsoft サポート
https://support.micr[...]
[36]
문서
IFS - Google ドキュメント エディタ ヘルプ
https://support.goog[...]
[37]
Microsoft Learn
Command shell overview | Microsoft Learn
https://learn.micros[...]
[38]
Java Language Specification
Java Language Specification, 3rd Edition
http://java.sun.com/[...]
Java.sun.com
[39]
Ecma-international.org
ECMAScript Language Specification, 5th Edition
http://www.ecma-inte[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com