if문으로 조건문을 생성하는 법을 이전 시간에 배웠다.
const answer = prompt("어디사세요?");
if (answer === "선릉") {
alert ("가까우시네요!");
} else if (answer === "강남") {
alert ("가까우시네요!");
} else if (answer === "을지로") {
alert ("조금 멀리 사시네요.");
} else {
alert ("거긴 어디인가요?")
}
위의 조건문을 보면 answer가 "선릉", "강남"일 때는 조건은 다릦만 같은 결과를 리턴한다. 만약 역삼, 삼성도 조건문에 추가하는데, 같은 결과를 리턴해야 한다면? 대략 4줄이 추가된다. 결과는 같은데 조건문만 늘면 생산성이 떨어진다.
이럴 때 같은 결과에 해댱하는 조건을 묶을 수 있다.
if (선릉 또는 강남 또는 삼성 또는 역삼){
alert("가까우시네요!")
}
바로 "또는(or)"이라는 논리 연산자를 사용하는 것이다. "또는(or)"에 해당하는 Javascript 연산자는 ||
이다. (shift + \
)
위의 코드를 논리 연산자를 활용해서 다시 작성해보자.
const answer = prompt("어디사세요?")
if (answer === "선릉" || answer === "강남" || answer === "역삼") {
alert ("가까우시네요!");
} else if (answer === "을지로") {
alert ("조금 멀리 사시네요.");{
else {
alert ("거긴 어디인가요?")
}
}
}
하나의 if문에 참/거짓을 판단할 조건을 세 개(선릉, 강남, 역삼)이다. prompt
함수에서 리던 받은 answer가 선릉, 강남, 역삼 중 하나일 경우, 즉, 저 셋 중에 하나로 대답하면 해당 if 문이 실행된다.
이번에는 취미와 성향을 받아서 동아리를 추천하는 코드를 작성해보자. 취미가 꼭 축구여야하고, 아침형 인간만 조기축구회를 추천한다.(취미가 축구인데, 저녁형 인간이면 추천 안 함)
이렇게 어떤 조건 하나만 맞으면 되는 것이 아니라 모두 충족해야할 때 "그리고(and)"연산자인 &&
를 사용한다.
const hobby = prompt("취미가 무엇인가요?");
const morning = prompt("아침형 인간인가요?");
if (hobby === "축구" && morning === "네") {
alert ("조기축구회를 추천합니다.");
} else {
alert ("무슨 동아리가 좋을지 생각해볼게요.");
}
다음은 여러가지 연산자를 활용한 if문에서 표현할 수 있는 다양한 표현이다.
if (age > 65 || age < 21 && res === "한국")
어떻게 해석해야 하는 걸까?
||
를 기준으로 나누면 아래 중에 하나만 참이어도 if문이 실행된다.
그 다음으로 &&
을 기준으로 나누면 두개의 조건이 다 맞아야한다.
위의 두 가지 해석중 무엇이 맞을까?
컴퓨터 언어는 왼쪽에서 부터 해석하기 때문에 위가 맞는 해석이다. 컴퓨터는 본인이 정한 기준으로 실행이 되지만, 개발자인 사람은 볼 때마다 헷갈리는 경우가 있으니 항장 괄호로 묶어주는 습관을 들이는게 좋다.
if (age > 65 || (age < 21 && res === "한국"))
만약 두 번쨰 해석이 원했던 결과라면 아래와 같이 괄호를 묶어주면 된다.
if ((age > 65 || age < 21) && res === "한국"))
function rockPaperScissors(player1, player2) {
if ( (player1 === "가위" && player2 === "보" ) || (player1 === "가위" && player2 === "가위") ) {
return "player1";
} else if ( (player1 === "가위" && player2 === "바위" )) {
return "player2";
} else if ( (player1 === "바위" && player2 === "가위" ) || (player1 === "바위" && player2 === "바위") ) {
return "player1";
} else if ( (player1 === "바위" && player2 === "보" )) {
return "player2";
} else if ( (player1 === "보" && player2 === "바위" ) || (player1 === "보" && player2 === "보") ) {
return "player1";
} else if ( (player1 === "보" && player2 === "가위" )) {
return "player2";
}
}
console.log(rockPaperScissors("보","바위"))