if 문
- if문은주어진 조건식의 참 (true) / 거짓 (false) 여부에 따라 실행이 결정된다.
- 따라서 참과 거짓을 판단하기 위해 조건식이 boolean 타입이 되도록 작성.
if (true) { // 소괄호의 조건식이 참으로 평가된 경우 내부의 코드가 실행된다.
console.log("hello, world");
}
조건식에 사용될 수 있는 연산자의 종류
- 동치연산자(===)
> 두 피연산자가 동일하면 true, 그렇지 않으면 false 반환, !== 는 반대로 두 피연산자가 동일하지 않으면 true, 동일하면 false를 반환한다.
ㄴ 헷갈림 주의
let name = "taekho";
if (name === "taekho"){
cnosole.log("동일합니다.");
}
- 비교연산자 ( > , < , >= , <= )
> 두 피연산자의 값의 크기를 비교한다. 부등호 기호의 사용법과 유사
let num = 5;
if (num < 8){
num = num +1;
}
console.log(num); // 6
- 논리연산자 ( && , || )
> 논리합(||)과 논리곱(&&) 을 사용하면 복수의 조건을 작성할 수 있다. 논리합(or)과 논리곱(and) 으로 이해하면 편하다.
let age = 27;
if(age >= 20 && age <= 34){ // 논리곱은 두가지 조건을 모두 만족해야 내부 코드 실행
console.log("청년입니다.");
}
- 부정연산자 ( ! )
> 조건을 부정한다. true -> false, false -> true 반대로 리턴한다.
else , else if 문
- if문만 사용했을 때는 조건식이 true 일떄만 코드가 실행이 되도록 했지만 else 문을 사용하면 false일 경우의 실행되는 코드를 작성할 수 있고, else if 문을 사용한다면 true, false 뿐만이 아니라 조건을 더 추가해서 사용할 수 있다.
- else 문은 독립적으로 사용할 수 없고, 무조건 if문 뒤에만 올 수 있다.
- if문과 else문은 두 번 이상 사용할 수 없으나, else if 문은 여러 번 사용할 수 있다.
let age = 27;
if (age < 8) {
console.log('미취학아동입니다.');
} else if (age >= 8 && age < 14) {
console.log('초등학생입니다.');
} else if (age >= 14 && age < 17) {
console.log('중학생입니다.');
} else if (age >= 17 && age < 20) {
console.log('고등학생입니다.');
} else {
console.log('성인입니다.');
} // 조건식에 따라 "성인입니다." 출력
풀어본 문제 중 다시 생각해 볼 문제
1.
// 처음 내가 푼 방식
// 점수에 따라 학점을 계산하고 '+' 또는 '-'를 추가하여 반환하는 함수
function convertScoreToGradeWithPlusAndMinus(score) {
if(score > 100 || score < 0){
return "INVALID SCORE";
} else if(score >= 90){
if(score >= 98){
return "A+";
} else if(score < 93){
return "A-";
} else {
return "A";
}
} else if (score >= 80){
if (score >= 88){
return "B+";
} else if (score <83){
return "B-";
} else {
return "B";
}
} else if (score >= 70){
if (score >= 78){
return "C+";
} else if (score <73){
return "C-";
} else {
return "C";
}
} else if (score >= 60){
if (score >= 68){
return "D+";
} else if (score <63){
return "D-";
} else {
return "D";
}
} else{
return "F"
}
}
틀리진 않았지만 조건문을 많이 사용해서 가독성이 떨어지는 것 같다.
function convertScoreToGradeWithPlusAndMinus(score) {
let grade;
if(score > 100 || score < 0) { // 100점은 예외처리
return 'INVALID SCORE';
} else if(score === 100) {
return "A+";
} else if(score >= 90) {
grade = 'A';
} else if(score >= 80) {
grade = 'B';
} else if(score >= 70) {
grade = 'C';
} else if(score >= 60) {
grade = 'D';
} else if(score >= 0) {
return 'F';
}
// 일의 자리를 구해서 그 값에 따라서 등급에 +/- 를 붙이기
let lastDigit = score % 10;
if(lastDigit >= 8) {
return grade + "+";
} else if(lastDigit <= 2) {
return grade + "-";
} else {
return grade;
}
}
2.
// 처음에 푼 방식
// 시간, 분, 초에 1초를 더하는 함수
function addOneSecond(hour, minute, second) {
if (0 <= hour && hour < 24 && 0 <= minute && minute < 60 && 0 <= second && second < 60){
if(second === 59 && minute === 59 && hour === 23){
return `1초 뒤에 0시 0분 0초 입니다.`;
} else if (second === 59 && minute === 59){
return `1초 뒤에 ${hour + 1}시 0분 0초 입니다.`;
} else if (second === 59){
return `1초 뒤에 ${hour}시 ${minute + 1}분 0초 입니다.`
} else {
return `1초 뒤에 ${hour}시 ${minute}분 ${second + 1}초 입니다.`
}
}
}
이 문제도 틀리진 않았지만 좀 더 간략하고 가독성 높게 작성하면 좋을 것 같다.
( 조건식을 너무 한 줄에 나열해서 가독성이 떨어지는 것 같고 너무 if else if else문에만 집착한 것 같음. )
function addOneSecond(hour, minute, second) {
second++; // 1초 증가
// second가 1초가 더해졌을 때 60일 경우
if(second === 60) {
// minute + 1, second = 0
minute++
second = 0;
}
// minute가 60일 경우
if(minute === 60) {
// hour + 1, minute = 0 (second는 위의 조건문에서 이미 변경함)
hour++;
minute = 0;
}
// hour가 24가 될 때
if(hour === 24) { // 날짜는 조건에 없기 때문에 hour = 0 마찬가지로 second minute은 이미 변경됨.
hour = 0;
}
// 문자열 리턴
return `1초 뒤에 ${hour}시 ${minute}분 ${second}초 입니다.`
}
* 문제를 통으로 생각하려고 하지 말고 최대한 내가 생각하기에 쪼갤 수 있을 때까지 쪼갠 후에 풀면 더 나아질 것 같다.
3.
// 처음 푼 방식
// 세 단어 중 가장 짧은 단어를 찾는 함수
function findShortestOfThreeWords(word1, word2, word3) {
// word 길이로 값을 지정
let wLength1 = word1.length;
let wLength2 = word2.length;
let wLength3 = word3.length;
if(wLength1 <= 10 && wLength2 <= 10 && wLength3 <=10){
if(wLength1 <= wLength2 && wLength1 <= wLength3){ // word1이 다른 두 단어보다 같거나 작을때
return word1;
} else if(wLength2 <= wLength3){ // word2가 word3보다 작을 때
return word2;
} else {
return word3;
}
}
}
이번 문제 또한 틀리진 않았지만 더 쪼개서 간단하게 쓰면 좋을 것 같다.
function findShortestOfThreeWords(word1, word2, word3) {
// 변수에 첫번째 단어 지정
let currentShortestWord = word1;
// word1 과 word2 비교
if(currentShortestWord.length > word2.length) {
currentShortestWord = word2;
}
// 조건식 결과로 변수에 저장된 값과 word3 비교
if(currentShortestWord.length > word3.length) {
currentShortestWord = word3;
}
// 변수에 값을 저장해놓고 비교했기 때문에 변수에 가장 짧은 단어가 저장되어있음.
return currentShortestWord;
}
삼항 연산자로도 계산이 될 것 같아서 해봤다.
function findShortestOfThreeWords(word1, word2, word3){
let shortestWord;
// word 1, 2 비교해서 작은단어 변수에 저장
word1.length <= word2.length ? shortestWord = word1 : shortestWord = word2;
// 변수와 word3 비교
if(shortestWord.length > word3.length){
return word3;
} else {
return shortestWord;
}
}
비슷한 것 같다.
조건식을 배우고 문제를 풀어봤는데 틀리지는 않았지만 더 간략하고 가독성 좋은 코드를 짜기 위해서는 여러 방식으로든 많이 풀어보고 생각을 쪼개서 해보는 게 도움이 될 것 같다. 아직은 익숙하지 않아서 한 번에 생각이 떠오르지는 않지만 하다보면 되겠지
'공부기록 > JavaScript' 카테고리의 다른 글
#8일차 [JavaScript] 객체, 핵심 개념과 주요 문법 ( 원시 자료형과 참조 자료형, 스코프, 클로저 ) (0) | 2024.11.15 |
---|---|
#7일차 [JavaScript] 배열, 객체 (0) | 2024.11.14 |
#6일차 [JavaScript] 반복문 , 배열 (0) | 2024.11.14 |
#5일차 [JavaScript] 반복문 개념, 문제 (0) | 2024.11.12 |
#3일차 [JavaScript] 기초 (0) | 2024.11.08 |