프로그래밍 언어론 - 조건문
조건문을 사용하면 조건에 따라 둘 이상의 실행 경로 중 하나를 선택할 수 있습니다.
프로그래밍에서 의사 결정 논리를 구현하기 위한 수단을 제공합니다.
두 가지 일반적인 유형의 조건문이 있습니다.
- “if” 문
- if 문은 조건이 참인지 거짓인지에 따라 특정 실행 경로를 선택합니다.
- if 문은 FORTRAN 프로그래밍 언어에서 처음 도입되었습니다.
- “case” 또는 “switch” 문
- case 또는 switch 문을 사용하면 서로 다른 조건에 따라 여러 경로 중 하나를 선택할 수 있습니다.
- 표현식을 평가하고 값을 다른 케이스 레이블과 일치시킵니다.
- 일치하는 경우에 따라 해당 코드 블록이 실행됩니다.
If 문
FORTRAN
If 문은 FORTRAN에 도입 처음 도입하였습니다
식의 결과에 따라 다른 레이블(L1, L2 등)로의 분기를 지원했습니다.
1. if(식) L1, L2
2. if(식) L1, L2, L3
- 식이 참이면 레이블 L1로 분기하고, 거짓이면 레이블 L2로 분기
- 식의 값이 음수이면 레이블 L1로, 0이면 레이블 L2로, 그리고 양수이면 레이블 L3으로 분기
새롭게 도입 된 if 문
if (식) 문장
식이 참이면 문장을 실행하고 거짓이면 문장을 실행하지 않는 if 문이 포트란에 새로 등장하였다.
if(I,GT,10) K = 20
의 경우
- 참인 경우에 한 문장만 실행 가능
- 조건식이 참인 경우 실행 될 문장이 여러 개면 Go To 문을 활용해야 한다
Go To 문 문제 보완, FORTRAN 77
블록 if 문을 추가하여 Go To 문제를 보완했다
C
if(exp)
문장 1;
else
문장 2;
- 중괄호를 사용한다
- 식이 참이거나 거짓인 경우에 실행 될 문장이 여러 개라면 중괄호로 묶은 복합 문 사용
if(식) {
문장1;
문장2;
⋮
} else {
문장n;
문장n+1;
⋮
}
C의 dangling else 문제
- else가 어떤 if와 연결되는지 모호한 문제가 있다
- Pascal과 C
- else는 연결된 else가 없는 가장 가까운 if와 결합한다’는 규칙을 적용
- 첫 번째 if와 연결을 시키려면 중괄호로 두 번째 if 문을 묶음
if 절에는 의미있는 문장을 배치!
- 조건이 거짓인 경우에 문장을 처리하는 경우
- if 조건을 부정, 처리해야 할 문장을 if 절로 이동, else 절을 지우기
Ada
- FORTRAN과 유사하게 if 문 끝에 endif 위치
- then 절과 else 절에는 둘 이상의 문장이 올 수 있음
Case 문과 Switch 문
- 조건에 따라 여러 경로 중 하나를 선택한다
ALGOL W에서 처음 도입
- 식의 값이 1이면 문장 1
- 2명 문장 2, n이면 문장 n이 선택되어 실행 되도록 작동한다
C와 JAVA
- 식의 값이 상수1이면 문장들 1, 문장들 2, …, 문장들 n이 실행
- 상수 2이면 문장들2, …, 문장들 n이 실행
- 일치하는 상수가 없을 경우에는 문장들 n이 실행
- default가 없으면 아무 일도 하지 않고 switch 구조를 빠져나옴
Ada
-
when others는 생략 가능
-
선택 리스트들이 식에서 나타날 수 있는 결과를 모두 포함하고 있어야 함
-
만약 모든 결과를 선택리스트에 나타낼 수 없으면 others를 이용
-
상수는 물론 3|5|7과 같은 상수들의 나열, 90…100과 같은 범위도 가능
-
일치하는 선택리스트가 없을 때 아무 작업도 실행하고 싶지 않다면 null을 이용
with Ada.Text_IO;
use Ada.Text_IO;
procedure Case_Grade is
package Int_IO is new Ada.Text_IO.Integer_IO (Integer);
use Int_IO;
subtype Score_Range is Integer range 0..100;
Score : Score_Range;
Grade : Character;
begin
Put("Score: ");
Get(Score);
case Score is
when 90..100 =>
Grade := 'A';
when 80..89 =>
Grade := 'B';
when 70..79 =>
Grade := 'C';
when 60..69 =>
Grade := 'D';
when 0..59 =>
Grade := 'E';
end case;
Put(Grade);
end Case_Grade;
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
728x90
'Computer Science > 프로그래밍 언어론' 카테고리의 다른 글
프로그래밍언어론 - 부프로그램 (0) | 2023.05.30 |
---|---|
프로그래밍언어론 - 반복문 (2) | 2023.05.30 |
정규 언어, 정규 문법, 유한 오토마타의 동치 관계 (0) | 2023.05.28 |
NFA와 DFA (0) | 2023.05.28 |
프로그래밍 언어론 - 식 (2) | 2023.05.25 |