혹시 삼항 연산자 안에 for 반복문
을 사용하려다 실패한 적이 있으신가요?
며칠 전에 <prompt 창에서 숫자를 입력 받아 2 또는 3의 배수의 총합을 구하는 것>을 구현해보다가, 삼항 연산자 내부에 for 반복문
을 사용하려면 어떻게 해야 하는지 알게 되었습니다. 그래서 궁금하신 분들을 위해 제가 찾은 방법을 공유하고자 합니다.
<prompt 창에서 숫자를 입력 받아 2 또는 3의 배수의 총합 구하기>를 구현하면서 작성해 놨던 코드의 일부분을 삼항 연산자로 바꾸고 for 반복문
을 적용해봤습니다.
👉기존 코드:
//정수 n을 입력받아 2 또는 3의 배수의 총합 구하기 function sumN () { let n = prompt("값 'n'을 입력해주세요.(0 < n < 100)"); let result = 0; function sum (n) { if (n <= 0 || n >= 100) { alert("'n의 값을 올바르게 입력해주세요. (0 < n < 100)"); } else { for (let i = 0; i <= n; i++) { if(i%2 === 0 || i%3 === 0) { result += i; } } console.log(result) } } sum(n); }
👉'if문'을 '삼항 연산자'와 'for문'으로 수정 후
function sumN() { let n = prompt("값 'n'을 입력해주세요.(0 < n < 100)"); let result = 0; function sum(n) { n <= 0 || n >= 100 ? alert("'n의 값을 올바르게 입력해주세요. (0 < n < 100)") : (() => { for (let i = 0; i <= n; i++) { if (i % 2 === 0 || i % 3 === 0) { result += i; } } console.log(result); })(); } sum(n); }
그러자 에러 발생😓..... ❗"삼항 연산자에 `for 반복문` 자체를 넣어 활용할 수 없음"❗
이유를 찾아보니 삼항 연산자는 단일 값을 생성하는 조건식에 적합하다고 합니다. 루프와 같은 다중문 블록이 아닌 간단한 표현식을 처리하도록 설계되었기 때문에 for 반복문
실행이 안 되는 것이었습니다.
💡하지만 아예 활용할 수 없는 것은 아님!
제 코드의 경우, IIFE
(즉시 호출 함수 표현식)을 사용해주면 가능하다고 합니다.
그래서 수정해보니까 '성공!'
function sumN() {
let n = prompt("값 'n'을 입력해주세요.(0 < n < 100)");
let result = 0;
function sum(n) {
n <= 0 || n >= 100
? alert("'n의 값을 올바르게 입력해주세요. (0 < n < 100)")
: (() => {
for (let i = 0; i <= n; i++) {
if (i % 2 === 0 || i % 3 === 0) {
result += i;
}
}
console.log(result);
})();
}
sum(n);
}
🤔삼항 연산자를 이렇게 사용하는 경우가 흔한지는 모르겠지만, 삼항 연산자는 간단한 표현식만 처리되도록 만들어져 있다는 사실과, for반복분 적용하고 싶을 때는 즉시 실행 함수로 처리하면 된다는 사실을 새롭게 배울 수 있었어서 제겐 좋은 경험이 됐던 것 같습니다🙂.