if 문
void main() {
int number = 0;
if (number % 4 == 0) {
print('4의 배수입니다');
} else if (number % 4 == 1) {
print('나머지가 1입니다.');
} else if (number % 4 == 2) {
print('나머지가 2입니다.');
} else {
print('어떤 조건에도 맞지 않습니다.');
}
}
switch 문
void main() {
int number = 21;
switch (number % 4) {
case 0:
print('4의 배수입니다.');
break; // case 0일 때, switch 문을 빠져나와라
case 1:
print('나머지가 1입니다.');
break;
case 2:
print('나머지가 2입니다.');
break;
default:
print('어떤 조건에도 맞지 않습니다.');
break;
}
}
if문 vs switch문
1. if문이 조금 더 복잡한 연산, 계산을 할 수 있다.
2. switch문이 if문 보다, 더 빠르다.
3. if문은 첫 번째 조건문이 맞으면 그 아래의 다른 조건은 확인하지 않는다.
void main() {
if(number % 4 == 0) {
print('4의 배수입니다.');
} else if (number % 3 ==0) {
print('3의 배수입니다.');
} else if (number % 2 == 0) {
print('2의 배수입니다.');
}
}
// switch는 조건이 하나라서 위의 if문 처럼 여러 조건을 사용하지 못한다.
void main() {
for(int i = 0; i < 10; i++) {
print(i);
}
}
// int i = 0; // 선언
// i < 10; // 조건
// i++ // 실행문(연산)
List를 Looping하는데 사용
void main() {
List numbers = [
1,
1,
2,
3,
5,
8,
];
int total = 0;
for(int i = 0; i < numbers.length; i++) {
total += numbers[i];
}
print(total); // 20
}
for in
void main() {
List numbers = [
1,
1,
2,
3,
5,
8,
];
int total = 0;
for(int number in numbers) {
total += number;
}
print(total); // 20
// 단점: index를 알 수가 없다
}
해당 조건이 달성이 될 때까지, 계속 진행된다.
void main() {
int number = 10;
// 조건을 달성할 때까지
// 조건에 달성 못하면 무한 loop에 빠진다...
while(number < 20) {
print(number);
number++;
}
}
void main() {
int number = 10;
// do 계산을 먼저 실행한 후에,
do {
print(number);
number++;
} while(number < 20); // 조건을 판단
}
void main() {
int number = 10;
// while
while(number < 20) {
print(number);
number ++;
// number가 15가 되면 멈춰라
if(number == 15) {
break;
}
}
// for
for(int i = 0; i < 10; i++) {
if(i == 5) {
break;
}
print(i);
}
}
continue
void main() {
int number = 10;
for (int i = 0; i < 10; i++) {
if (i == 5) {
continue;
}
// 5가 skip 되었다.
print(i); // 0 1 2 3 4 6 7 8 9
}
}
enum 없이
void main() {
// 프로그래밍의 3가지 상태
// 승인 - approved
// 반려 - rejected
// 대기 - pending
String status = 'approved';
if(status == 'apprved') { // 스펠링 실수
print('승인되었습니다.');
} else {
print('반려나 대기 되었습니다.'); // 실수에 의해 잘못된 것이 실행될 수 있다. 그래서 enum이 필요하다.
}
}
enum을 적용했을 때
enum을 사용하면 위험성이 적게 조건문을 사용할 수 있다.
enum Status {
approved,
rejected,
pending
}
void main() {
// 승인 - approved
// 반려 - rejected
// 대기 - pending
Status status = Status.approved;
if(status == Status.approved) {
print('승인되었습니다.');
} else {
print('반려나 대기 되었습니다.');
}
// enum의 모든 옵션들을 print하기
print(Status.values.toList()) // [Status.approved, Status.rejected, Status.pending]
}
void
를 넣는다.함수 기본
void main() {
List testList = [1, 1, 2, 3, 4, 5, 8];
List testList2 = [2, 3, 4, 5, 1, 2];
List testList3 = [1, 2, 3, 4, 5];
// 함수를 변수에 담을 수 있다.
int result = addList(testList); // 24
int result2 = addList(testList2); // 17
print(result); // 24
print(result2); // 17
}
// 타입이 List인 list라는 이름을 가진 파라미터 넣어서
// int 타입인 값을 리턴하는 함수
int addList(List list) {
int total = 0;
for (int number in list) {
total += number;
}
return total;
}
optional parameter
넣어도 되고, 안 넣어도 되는 값을 의미한다
void main() {
List testList = [1, 1, 2, 3, 4, 5, 8];
List testList2 = [2, 3, 4, 5, 1, 2];
List testList3 = [1, 2, 3, 4, 5];
// 파라미터를 넣는 순서가 같아야한다.
int result = addList(testList, 1);
int result2 = addList(testList2, 1, 2);
print(result); // b 값은: 3, 24
print(result2); // b 값은: 2, 17
}
// 파라미터를 넣는 순서가 같아야한다.
// 파라미터가 [] 안에 들어가면 넣어도 되고, 안 넣어도 된다
// default 파라미터를 지정할 수도 있다
int addList(List list, int a, [int b = 3]) {
print('b 값은: $b');
int total = 0;
for (int number in list) {
total += number;
}
return total;
}
named parameter
사용하려는 함수가 다른 파일에 있다고 가정해보자. 함수에 파라미터가 수없이 많다고 생각했을 때, 순서가 헷갈릴 수 있다. 이 때 named parameter
를 사용한다.
void main() {
List testList = [1, 1, 2, 3, 4, 5, 8];
List testList2 = [2, 3, 4, 5, 1, 2];
List testList3 = [1, 2, 3, 4, 5];
// optional
// 어떤 파라미터든 순서에 상관없이 내가 원하는 파라미터를 넣을 때 쓴다
int result = addList(testList, 1, d: 2, b: 1, c: 10);
int result2 = addList(testList2, 1);
print(result); // 24
print(result2); // 17
}
// {}를 사용해서 named 파라미터를 넣는다.
int addList(List list, int a, {int b, int c, int d, int e}) {
int total = 0;
print('b: $b, c: $c, d: $d, e: $e');
// b: 1, c: 10, d: 2, e: null
// b: null, c: null, d: null, e: null
for (int number in list) {
total += number;
}
return total;
}
Typedef
는 함수와 밀접한 관계를 가지고 있다. Typedef
를 사용하면 함수를 시그니쳐화해주어서 여러가지 함수를 유용하게 다룰 수 있도록 해준다.
Typedef 선언
void main() {
add(1, 2); // x 더하기 y 는 3입니다.
subtract(3, 2); // x 빼기 y 는 1입니다.
Operation oper = add;
oper(1, 2); // x 더하기 y 는 3입니다.
oper = subtract;
oper(3, 2); // x 빼기 y 는 1입니다.
}
// typedef는 어떤 파라미터들을 함수에 넣을 지 지정하면 사용할 수 있다
typedef Operation(int x, int y);
// 보통의 함수 선언
void add(int x, int y) {
print('x 더하기 y 는 ${x+y}입니다.');
}
void subtract(int x, int y) {
print('x 빼기 y 는 ${x-y}입니다.');
}
좀 더 사용해보기
void main() {
calculate(1, 2, add); // x 더하기 y 는 3입니다.
calculate(3, 2, subtract); //x 빼기 y 는 1입니다.
}
typedef Operation(int x, int y);
// 보통의 함수 선언
void add(int x, int y) {
print('x 더하기 y 는 ${x+y}입니다.');
}
void subtract(int x, int y) {
print('x 빼기 y 는 ${x-y}입니다.');
}
void calculate(int x, int y, Operation oper) {
oper(x, y);
}