유튜브를 통해, 쉽고 간편하게 이해 해보아요!
구독/좋아요 해주셔서 감사합니다 :) !!
안녕하세요
오늘은 loop에서 사용되는 break 와 continue에 대해 알아보려고 합니다.
loop이 돌때,
break : loop을 완전히 끝내게 합니다, loop의 조건문 상관없이요.
예를들어, 초기값 i가 0 이고, 5 미만까지 총 5 번 돌아야하는 loop 있다고 가정할시,
i 값이 break 를 만난다면, 값이 0 이든 3 이든 상관없이 loop을 끝냅니다.
continue : 그 다음 반복으로 바로 점프 합니다, loop 안에 실행해야하는 내용이 있어도요.
예를들어, 초기값 i가 0 이고, 5 미만까지 총 5 번 돌아야하는 loop이 있고,
이 loop은 돌때마다, i 값을 이벤트로 출력 해준다는 loop의 내용이 있다고 가정하겠습니다.
그러나, i 의 초기값 0 이 loop의 내용 이벤트를 출력하기전에 continue를 만나게 된다면, 이벤트 출력을 건너뛰고,
바로 그다음 반복문으로 점프 합니다. 그러니 i 값은 0 에서 1이 되겠습니다.
예시를 통해 좀 더 쉽게 볼게요.
break
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract lec23{
event CountryIndexName(uint256 indexed _index, string _name);
string[] private countryList = ["South Korea","North Korea","USA","China","Japan"];
function useBreak() public {
for(uint256 i =0; i<countryList.length; i++){
if(i==2){
break;
}
emit CountryIndexName(i,countryList[i]);
}
}
}
현재 저희는 지난번 예제와 동일하게,
CountryIndexName 과 countryList 가 있습니다.
먼저 countryList는 ["South Korea","North Korea","USA","China","Japan"] 를 갖고있는 길이 5 인 배열입니다.
(인덱스는 0 부터 시작하니, 끝은 4 이겠네요)
그리고 CountryIndexName 이벤트는, 위의 배열값과 해당되는 인덱스 값을 출력하기위해 정의되었습니다.
자 인제 useBreak 함수를 볼게요.
for(uint256 i =0; i<countryList.length; i++)
for loop 의 초기값 i는 0 이고, i 는 countryList의 길이 5 미만일때만 반복문이 실행이 되고, i++은 반복문이 끝날때마다 i 씩 증가 한다 라는걸 알 수 있겠죠.
for(uint256 i =0; i<countryList.length; i++){
if(i==2){
break;
}
emit CountryIndexName(i,countryList[i]);
}
CountryIndexName 이벤트를 출력하기전,i == 2 즉 i 가 2가 된다면, if 문 안의 내용을 실행하게 되겠습니다.
if 문 안의 내용은 break; 입니다.
다시 말하자면, 반복문이 돌아서 i가 2가 되면, 해당 for loop은 완전히 멈추고 끝나게 되겠습니다.
즉 for loop의 조건문이 i 가 5 미만 까지 돈다고 하여도, i 가 2 가 되면, break 를 만나서 2의 이후 값 3과 4로 가는건 불가능 합니다.
continue
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract lec23{
event CountryIndexName(uint256 indexed _index, string _name);
string[] private countryList = ["South Korea","North Korea","USA","China","Japan"];
function useContinue() public {
for(uint256 i =0; i<countryList.length; i++){
if(i%2==1){
continue;
}
emit CountryIndexName(i,countryList[i]);
}
}
break 에서 보았던 예제와 매우 유사한 예제입니다.
다른점은, for loop 안에
if(i%2==1){
continue;
}
라는 점입니다.
먼저 if 문의 조건을 보면,
i%2 == 1 이라는 조건입니다.
다소 생소 하실 수도 있습니다.
% 의 의미는 나머지를 나타 냅니다.
예를들어,
0 나누기 2의 나머지는 0
1 나누기 2의 나머지는 1
2 나누기 2의 나머지는 0
3 나누기 2의 나머지는 1
4 나누기 2의 나머지는 0
여기서 알 수 있듯이,
2로 나누어서 나머지가 0이라면, 짝수 그리고 1 이라면 홀수라는 걸 알 수가 있습니다.
즉 i%2 == 1 일때는 i 의 값이 홀수 일때를 나타낸걸 알 수 있어요.
if 문은 홀수 일때만, if문의 내용을 실행한다 입니다.
if문의 내용은 continue 이니, CountryIndexName을 건너뛰고 그 다음 i 값으로 갈수 있다고 볼 수 있겠네요.
다시 말하자면, i의 값이 홀수가 된다면, CountryIndexName 이벤트를 건너 뛰고, 그 다음 반복문으로 간다.
i 값이 짝수가 된다면, if문이 실행이 되지 않기에 CountryIndexName 이벤트가 출력된다.
이 함수는 CountryIndexName는 짝수번째의 countryLista의 인덱스와 값이 실행 된다.
영상 참고 바랍니다.