본문 바로가기

카테고리 없음

Dart 기초(1)

**출처 : 인프런 강좌 'Dart 언어 4시간만에 완전정복'의  1강 기본기 강의 내용을 정리한 script 입니다.

  enum Status {
    approved,//승인
    pending, //대기
    rejected,//거절
  }

void main() {
  //1. var 과 dynamic
  //var : 다양한 타입 수용가능 but 초기 타입은 변경할수 x //dynamic : 다양한 타입 수용가능 타입 변경가능
  dynamic name = '코드';
  var name2 = '재밌다';
  print ('$name ${name.runtimeType} ${name2.runtimeType}');
  name = 5; // dynamic은 타입변경 ok
  //name2 = 5; //var 는 타입 변경 x
  print ('$name ${name.runtimeType} ${name2.runtimeType}');
  
  //2.null수용 가능 
  //String sub = '코드';//null 불가   
  String? sub = '코드'; //null 가능
  sub = null; 
  print(sub);
  
  //3.final, const : 값 변경 x, 타입생략가능 
  //final const 차이점 :빌드타임 값을 알고있어야하는지(const는 알고 있어야함)-대표예시 DateTime
  //ex final DateTime now = DateTime.now();
  //ex const DateTime now2 = DateTime.now2(); //에러발생

  //4.??= : 변수가 null일경우 오른 쪽값으로 변경
  double? number = 1.2;
  number = null;
  number ??= 3.1;
  print (number);
  
  //5.타입확인하기
  int number1  = 1;
  print(number1 is int);
  print(number1 is !String);
  
  //6.list<type>
  List<String> blackPink = ['제니','로사'];
  print(blackPink[1]);
  print(blackPink.length);
  blackPink.add('민지');
  blackPink.remove('로사');
  print(blackPink.indexOf('제니'));
  
  //7.map - key,value의<type>
  Map<String,bool> dictionary = {
    'Harry Porter':true,
    'Rone Wisely' :false
  };
  dictionary.addAll({
    'Spiderman' : false
  });
  dictionary['Hulk'] = true;
  print(dictionary['Hulk']);
  dictionary.remove('Hulk');
  print(dictionary.keys);
  
  //8.Set - List에서 중복제거
  Set<String> blackPink2 = {'제니','로사','로사'};
  print(blackPink2);
  print(blackPink2.contains('제니'));
  
  //9.switch case break continue
  int number3 = 1;
  switch(number3%3){
    case 0:
      print('나머지가 0');
      break;
    case 1:
      print('나머지가 1');
      break;
    default:
      print('나머지가 2');
      break;
  }  
  
  //10.loop - for , for in, while
  int total = 0;
  List <int> numbers = [1,2,3,4,5,6];
  for(int i = 0; i < numbers.length; i++){
    total+=numbers[i];
  }
  print(total);
  
  total =0;
  for(int number in numbers){
    if(number ==5) continue;
    total +=number;
  }
  print(total);

  total = 0;
  while(total<10){
    total +=1;
    if(total == 5){
      break;
    }
  }
  print(total);
  
  //11.enum (정해진 타입만 쓸수 있게 강제함)
  Status status = Status.approved;
  if(status == Status.approved){
    print('진행중');
  }else if(status == Status.pending){
    print('대기중');
  }else{
    print('거절');
  }
  
  //12.함수 선언법
//   addNumbers(10,20,30);
//   addNumbers(10);
//   addNumbers(x:10,y:20,z:30);

  int result = addNumbers(y:20,z:30);
  print(result);
  
  //12-7.operation 함수 (signature화 시킴)
  int result1 = calculate(10,20,30,add);
  int result2 = calculate(10,20,30,substract);
  print('$result1 $result2');
}

//12. 세개의 숫자 (x,y,z)를 더하고 짝수 홀수 알려주는 함수
//12-1.basic parameter
//12-2.optinal parameter (있어도 없어도 되는 파라미터 =>대괄호로 표시)
//12-3.named parameter : 순서 중요하지 않은 이름 있는 파라미터 
//12-4.named parameter에서 optional parameter 사용
//12-5.함수 앞에 타입 지정시 return 값 필요
//12-6.arrow 함수

//12-1.   addNumbers(int x, int y, int z){
//12-2.   addNumbers(int x, [int y= 0, int z= 0]){
//12-3. 
// addNumbers({
//   required int y,
//   required int z,
//   required int x,
// }){

//12-4.
//   addNumbers({
//     required int y,
//     required int z,
//     int x = 0,
//   }){
//     int sum = x + y + z;
//     if(sum % 2 == 0){
//       print('짝수');
//     }else{
//       print('홀수');
//     }
//   }

//12-5.
//   int addNumbers({
//     required int y,
//     required int z,
//     int x = 0,
//   }){
//     int sum = x + y + z;
//     if(sum % 2 == 0){
//       print('짝수');
//     }else{
//       print('홀수');
//     }
//     return sum ;
//   }

//12-6.
  int addNumbers({
    required int y,
    required int z,
    int x = 0,
  })=> x+y+z;
  
//12-7.
typedef Operation = int Function(int a, int b, int c);
int add(int a, int b, int c) =>a+b+c;
int substract(int a, int b, int c) => a-b-c;
int calculate(int a, int b, int c, Operation operation){
  return operation(a,b,c);
}