[Dart] Dart 언어 배우기 3

ryan·2021년 6월 18일
1

Dart/Flutter

목록 보기
9/21
post-thumbnail

링크


12. If, Switch 문

  • if(조건) {}: 조건이 맞으면 실행하라
  • else if(조건) {}: if(조건)이 아니면 이걸 실행해라
  • else {}: 그 외 모든 경우에 이걸 실행해라

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문 처럼 여러 조건을 사용하지 못한다.

13. For, While 문(loop)

For문

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를 알 수가 없다
} 

while문

해당 조건이 달성이 될 때까지, 계속 진행된다.

void main() {
  int number = 10;
  
  // 조건을 달성할 때까지
  // 조건에 달성 못하면 무한 loop에 빠진다...
  while(number < 20) {
    print(number);
    
    number++;
  }
} 

do while 문

void main() {
  int number = 10;
  
  // do 계산을 먼저 실행한 후에,
  do {
    print(number);
    
    number++;
  } while(number < 20); // 조건을 판단
} 

break, continue

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
  }
}

14. Enum 타입

  • Enum은 여러모로 잘 쓰이기때문에 잘 배우기.
  • enum을 사용하면 한정된 옵션을 굉장히 효율적으로 사용할 수 있다.

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]
}

15. Function(함수)

  • 함수를 선언할 때 리턴 타입을 정한다. 리턴 타입이 없으면 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;
}

16. Typedef

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);
}
profile
👨🏻‍💻☕️ 🎹🎵 🐰🎶 🛫📷

0개의 댓글