Flutter

[Dart] Dart 기본 문법

고쩡이 2023. 9. 13. 10:44

Dart 기본 문법(Dart 기본기)

  • var type은 변수의 type을 유추한다.
  var name3 = '블랙핑크';
  var number = 20;
  
  // 변수의 값이 실행되는 순간에 어떤 타입인지 알려준다
  print(name3.runtimeType);
  • 글자를 이어쓸때는 +.${variable} 를 사용한다.
  String name = '블랙핑크';
  String name2 = '제니';
  
  print(name + ' ' + name2);
  print('${name} ${name2}');
  print('$name $name2');
  print('$name.runtimeType') // x. name까지만 변수 인식. {}해주어야 함
  • var는 한번 선언하면 다른 타입으로 중간에 변경이 불가능하다. dynamic은 변경 가능하다.
dynamic name = '쩡이';
var name2 = '블랙핑크';

name = 2;
name2 = 5; // error 발생
  • nullable - null이 될 수 있다. / non-nullable - null이 될 수 없다. / null - 아무런 값도 있지 않다.
  • ?는 null이 될 수 있는 타입을 의미한다.
  String name = '쩡이';
  print(name);
  // name = null; error 발생
  String? name2 = '블랙핑크';
  name2 = null;
  • null이 될 수 있는 타입에서, !는 현재 값은 null 이 아님을 의미한다.
  String? name = '블랙핑크';
  print(name!);
  • final / const 로 지정하면 변수값을 바꿀 수 없다.
final String name = '쩡이';
//name = '제니'; error 발생

const String name2 = '죄니';
//name = '제니'; error 발생
  • final과 const의 차이?
    • const 로 지정하면 빌드타임에 값을 알고있어야 한다. 런타임 성능이 더 좋다.
    • final은 실행시점에 값을 결정한다. (빌드타임에 값을 알고있지 않아도 된다.)
final DateTime now = DateTime.now();
print(now); // 코드가 실행될때의 Time

//  const DateTime now2 = DateTime.now(); error 발생
print(now2); // 코드가 실행될때의 Time
  • is / is! 키워드로 타입(type)을 검사한다.
  print(1 is int);
  print(1 is! int);
  • List
  // List
  List<String> blackPink = ['제니', '지수', '로제', '리사'];
  
  print(blackPink.length);
  
  blackPink.add('현정');
  
  print(blackPink);
  
  blackPink.remove('현정');
  
  print(blackPink);
  
  print(blackPink.indexOf('로제'));
  • Map
  // Map
  // Key / Value
  Map<String, String> dictionary = {
    'Harry Potter' : '해리포터',
    'Ron Weasley' : '론 위즐리',
    'Hermione Granger' : '헤르미온느 그레인저',
  };
  
  print(dictionary);

  Map<String, bool> isHarryPotter = {
    'Harry Potter' : true,
    'Ron Weasley' : true,
    'Hermione Granger' : false,
  };
  
  isHarryPotter.addAll({
    'Spiderman': false,
  });
  
  print(isHarryPotter);
  
  // 키에 해당하는 value값 가져오기
  print(isHarryPotter['Spiderman']);
  
  isHarryPotter['Hulk'] = false;
  
  print(isHarryPotter);
  
  // 키를 통해 값 지우기
  isHarryPotter.remove('Harry Potter');
  
  // key,value 가져오기
  print(isHarryPotter.keys);
  print(isHarryPotter.values);
  • Set (중복 X)
  final Set<String> names = {
    '현정','철수','영희'
    };
  
  names.add('제니');
  names.remove('제니');
  
  print(names.contains('철수')); //true
  • If문
  int number = 2;
  
  if(number % 2 == 0) {
    print('값이 짝수입니다.');
  }else{
    print('값이 홀수입니다.');
  }
  • switch문
  int number = 3;
  
  switch(number % 3) {
    case 0:
      print('나머지가 0입니다.');
      break;
    
    case 1:
      print('나머지가 1입니다.');
      break;
      
    default:
      print('나머지가 2입니다.');
      break;
  }
  • for loop
  int total = 0;
  
  List<int> numbers = [1, 2, 3, 4, 5, 6];
  
  for(int i =0; i< numbers.length; i++){
    if(numbers[i] ==5) continue;
    total += numbers[i];
  }
  
  print(total);
  
  total = 0;
  
  for(int number in numbers){
    print(number);
    total += number;
  }
  • while loop
  int total = 0;
  
  while(total <10){
    total += 1;
    if(total == 5){
      break;
    }
  }
  
  print(total); // 10
  
  total = 0;
  
  do{
    total += 1;
  } while(total < 10);
  
  print(total); // 10
  • enum
enum Status{
  approved,
  pending,
  rejected,
}

void main() {
  Status status = Status.pending;
  
  if(status == Status.approved){
    print('승인입니다.');
  }else if(status == Status.pending){
    print('대기입니다.');
  }else{
    print('거절입니다.');
  }
}
  • parameter / argument - 매개변수
    positional parameter - 순서가 중요한 파라미터
    optional parameter - 있어도 되고 없어도 되는 파라미터 []
void main() {
  addNumbers(10);
  
  addNumbers(20,90,100);

}

// 세개의 숫자 (x, y, z)를 더하고 짝수인지 홀수인지 알려주는 함수
addNumbers(int x, [int y = 20, int z = 30]) {
  int sum = x + y + z;
  
  print('x : $x');
  print('y : $y');
  print('z : $z');
  
  if(sum % 2 == 0){
    print('짝수입니다.');
  } else {
    print('홀수입니다.');
  }
}
  • named parameter - 이름이 있는 파라미터 (순서가 중요하지 않다.) default는 기본값 지정.
void main() {
  addNumbers(y: 20,x: 10, z: 30);

}

addNumbers({
  required int x,
  required int y,
  int z = 20,
}) {
  int sum = x + y + z;
  
  print('x : $x');
  print('y : $y');
  print('z : $z');
  
  if(sum % 2 == 0){
    print('짝수입니다.');
  } else {
    print('홀수입니다.');
  }
}
  • arrow function
void main() {
  addNumbers(10, y:20);

}

int addNumbers(int x, {
  required int y,
  int z = 30,
}) => x + y + z; // 반환값
  • typedef
void main() {
  Operation operation = add;
  
  int result = operation(10, 20, 30);
  
  print(result);
  
  operation = subtract;
  
  int result2 = operation(10, 20, 30);
  
  print(result2);
  
  int result3 = calculate(30, 40, 50, add);
  
  print(result3);
}

// signature
typedef Operation = int Function(int x, int y, int z);

int add(int x, int y, int z) => x + y + z;

int subtract(int x, int y, int z) => x - y - z;

int calculate(int x, int y, int z, Operation operation){
  return operation(x, y, z);
}