오늘은 헷갈리는 for, while, do...while 에 대해서 물어보았다..
// 일단 세가지 녀석들의 기본 구조와 예시이다!
for문:
for ([초기식]; [조건식]; [증감식];){
[하고싶은거] // 조건식이 true 일때 실행한다
}
/** 예시 */
for (let i = 1; i <= 5; i++) {
console.log(i);
}
// 결과 => 1부터 5까지 출력됨
do...while문:
do {
[하고싶은거] // 조건식 계산 전 실행, 무조건 한번은 됨
} while([조건식]) // 조건식이 false면 문 탈출
/** 예시 */
let i = 1;
do {
console.log(i);
i++;
} while (i <= 5);
// 결과 => 1부터 5까지 출력됨
while문:
while([조건식]){
[하고싶은거] // 조건식이 true 일때만~~
}
/** 예시 */
let i = 1;
while (i <= 5) {
console.log(i);
i++;
}
// 결과 => 1부터 5까지 출력됨
// 그렇다면 GPT 선생님이 예로 들어준 while, do..while 의 혼동 상황 예제는..
do-while문은 최소 한 번은 코드 블록이 실행되기 때문에,
while문과 비교했을 때 실수하기 쉬운 상황이 발생할 수 있습니다.
예를 들어, 반복문을 사용하여 숫자를 입력 받고, 입력한 숫자가 특정 범위에 속하는지 확인하는 경우를 살펴보겠습니다.
1. while 문 사용예시:
let number; // 변수 초기화
// 조건식 해석 => number가 NaN OR 1미만 OR 10 초과
while (isNaN(number) || number < 1 || number > 10) {
number = parseInt(prompt("Enter a number between 1 and 10:"));
}
// 조건식이 false 될 때까지
// number에 prompt에서 입력받은 값을 정수로 변환 저장
// 즉 숫자가 아니거나 1보다 작거나 10보다 큰걸 입력하면,
// 또 prompt 띄워라 라는 건데...
이 경우, 사용자가 1에서 10 사이의 숫자를 입력할 때까지 계속해서 숫자를 입력 받습니다. 하지만 만약 다음과 같이 do-while문을 사용한다면:
2. do-while문 사용 예시:
let number;
do {
number = parseInt(prompt("Enter a number between 1 and 10:"));
} while (isNaN(number) || number < 1 || number > 10);
// 위 while 문과 비슷하지만
// 반드시 한번은 실행되므로
// 최초 무조건 한번은 prompt()가 실행된다
이 경우에도 동일한 동작을 수행하지만, do-while문은 코드 블록을 최소 한 번 실행하기 때문에 사용자에게 입력을 받는 prompt가 반드시 한 번 실행됩니다.
그렇기 때문에 이 상황에서는 do-while문을 사용하는 것이 더 적절합니다.
// 그렇습니다 적절한 예제 인 것 같습니다..
// 하지만 어쨌든 둘다 prompt 잘 뜨고 제대로 입력할 때까지 반복되니까 좀 헷갈리는데요..
또 다른 예로, 배열의 길이를 기반으로 한 반복을 생각해보겠습니다.
let arr = []; // 배열 초기화
// 조건식 해석 => 배열의 length가 0보다 크면
while (arr.length > 0) {
// 콘솔에 배열의 마지막 요소 제거하고 제거한 그 요소 띄워라~~
console.log(arr.pop());
}
// 애초에 arr 배열에 암것도 없으니까
// while문 실행도 안될 것임
// 즉 에러 없음
이 경우에는 배열이 비어 있으므로 while문의 코드 블록이 실행되지 않습니다. 하지만 do-while문을 사용하면:
let arr = [];
do {
console.log(arr.pop());
} while (arr.length > 0);
// 무조건 한번은 실행되므로
// 배열의 마지막 요소를 제거하려고 시도할 것임
// 하지만 배열엔 아무것도 없으므로
// error를 뱉는다..
여기서는 배열이 비어 있음에도 불구하고, do-while문의 코드 블록이 최소 한 번 실행되기 때문에 에러가 발생합니다.
이러한 경우에는 while문이 더 적절한 선택입니다.
이처럼 do-while문과 while문을 사용할 때는 각각의 특성을 이해하고 적절한 상황에서 사용해야 합니다.
// 좋은 예시다.. 하지만 pop 이런거 나와서 초심자는 또 한번 물어봐야 한다, 그래서
// 더 쉽게
let i = 1;
do {
console.log('이게됨? 되면 i는 ' + i);
i++;
} while ( i < 1 )
// 조건식은 i가 1보다 작으면 이지만
// 이것은 된다. 결과는 당연히 다음과 같다
// '이게됨? 되면 i는 1'
// 이건 왜 될까? 한번은 실행하기 때문, 반면에
let i = 1;
while ( i < 1 ) {
console.log('이게됨? 되면 i는 ' + i);
i++;
}
// 이건 안된다
// 조건식 체크부터 하기 때문에
// i가 1보다 작지 않으므로 false
// 그렇다고 한다
// 구글에 그냥 검색해보면 do...while 틀린 예시들도 좀 돌아다닌다...
// GPT 선생님 짱
'javascript' 카테고리의 다른 글
[자바스크립트 13] 함수(파라미터와 인자) (0) | 2023.04.23 |
---|---|
[자바스크립트12] 함수기본 (0) | 2023.04.18 |
[자바스크립트10] 조건반복문(while, do...while) (0) | 2023.04.17 |
[자바스크립트09] 반복문(forEach) (0) | 2023.04.16 |
[자바스크립트 08] 조건문(switch) (0) | 2023.04.16 |