명령형 스타일의 코딩 방법//
함수형 자바스크립트와
동시성 프로그래밍
===========================
문제>
// ( f 함수에 파라미터로 있는) list에서 홀수를 length 만큼 뽑아서 제곱한 후 모두 더하기
기본 코드
function f(list,length){
log(list);
}
function main(){
f([1,2,3,4,5], 2); // 여기는 f함수 실행부분이고, 실행할때 인자를 가지고 실행을 함
}
main();
=============================
============================
명령형 코드<<<<<<<<<<<<<<<<<<<<<
일단 명령형 전체 코드
function f(list,length){
let i = 0;
let acc =0;
for(const a of list){
if(a % 2){
acc = acc + a * a;
if(++i == length) break;
};
};
log(acc);
};
function main(){
f([1,2,3,4,5], 1); //1
f([1,2,3,4,5], 2); //10
f([1,2,3,4,5], 3); //35
};
main();
팁1>
일단 자바스크립트에서 리스트를 순회하는 방법은
for문을 이용해서 함
for(const a of list){
log(a); // 콘솔로그로 a 를 찍어보면 로그에 쫘르륵 찍히죠.
};
팁2>
위의 코드에서 또 홀수만 뽑아 보려면
if문으로 조건 걸어서 걸러주면 되겠죠.
for(const a of list){
if(a % 2){ //여기 조건문은 a 배열에서 나누기 2 하면 홀수만 출력이 되죠
log(a);
};
};
팁3>
위의 코드에서 또 홀수만 뽑았는데,,,이제는 또 length만큼만 뽑고싶다면
그렇다면 그 말은
어떤 값이 length와 동일해져야 되니까 (현재 length의 값은 2임)
(즉, 어떤 값이 2가 되야된다)
그러면
일단
어떤값을 만들어야되니까 !
변수 i를 만들고
let i = 0;
이 i 를 비교시키면되니까
if문을 만들고
조건을 어떻게 넣냐면,
if(++i == length) break;
이렇게 넣는데
이거는
i를 증가시키면서 length랑 비교를 하면서 값이 조건에 만족하면(값이 똑같다면)
순회를 하지말아라 라고하는 break; 를 걸어주면 된다.
그러면
for문은 브레이크가 걸려서 더이상 순회(반복문을)를 하지않고 멈춘다.
그래서 결과 값은 2개가 나오게된다.
코드는 이렇게 된다.
function f(list,length){
let i = 0;
for(const a of list){
if(a % 2){
log(a);
if(++i == length) break;
};
};
};
이렇게 코드가 되는데
function f(list,2){
let i = 0;
for(const a of list){
if(a % 2){
log(a);
if(++i == 2) break;
};
};
};
length 를 2로 바꿔 보았다.
즉, i 가 2 가 되면 반복문이 멈추는 것이다.
i 는
0
1
까지만 돌고
2가되면 멈추는거죠.
그니까
일단 반복문 돌아
그럼 값 찍히고
i는 1이되고
또 반복문돌고
찍어
i는 2야 그럼 멈춤
그럼 로그에는 총 2개만 찍혔죠.
끝.
팁4>
참고로...
여기서 ++i 는
전치 연산 후치연산이 있는데,
여기는 전치 연산인데,
++i
는
전치는 1을 더한후 값을 돌려주고
후치는 값을 돌려준후에 1을 증가시킨다.
즉
a=10;
b=++a; // 11
b=a++; // 10
팁5>
이어서
제곱한후 는
로그에서 제곱을 하면 됩니다.
log(a * a) 이렇게 하면되쥬~
팁6>
그리고
모두 더하기는,,,
일단 그럼
모든 값을 누적을해야되니까
누적할 임시 변수를 하나 만들고,
let acc = 0;
acc = acc + a * a;
이렇게 하고
로그에서
acc를 찍어 보면 되쥬
코드는
function f(list,length){
let i = 0;
let acc =0;
for(const a of list){
if(a % 2){
acc = acc + a * a;
if(++i == length) break;
};
};
log(acc); //여기서 찍어봅니다. 왜냐면 함수 안에서 실행 시켜야되니까요. 물런 밖으로 빼서할수도있긴하죠...
};
1*1+0 = 1
3*3+1 = 10
끝
이런 명령형 코드에 쓰인 기술들을 요약해보자면,
-for 반복문을 썻고
-if문으로 제어를 했고
-시간을 조절/제어 하기위해 break 를 썻음
여기까지가 명령형 스타일의 코딩이다.