Flutter(플러터)

Dart #1 기본기

백코딩 2023. 9. 17. 22:40
728x90
void main(){
  // variable

  var name = '코드팩토리';
  
  print(name);
  
  var name2 = '소녀시대';
  
  print(name2);
  
  name = '프로그래밍';
  
  print(name);
  
//  var name = '' 변수 선언은 두번 할 수 없다.
  
}
void main(){
  // 정수
  // integer
  
  int number1 = 10;
  print(number1);
  
  int number2 = 20;
  print(number2);
  
  print(number1 + number2);
  print(number1 - number2);
  print(number1 * number2);
  print(number1 / number2);
  
}
void main() {
  // 실수
  // double
  double number1 = 2.5;
  double number2 = 0.5;

  print(number1 + number2);
  print(number1 - number2);
  print(number1 * number2);
  print(number1 / number2);
}
void main() {
  // 맞다/ 틀리다.
  // Boolean
  
  bool isTrue = true;
  bool isFalse = false;
  
  print(isTrue);
  print(isFalse);
}
void main() {
  // 글자 타입
  // String 
  String name = "소녀시대";
  String name2 = '하하';
  
  print(name);
  print(name2);
  
  // var String
  var name3 = '블랙핑크';
  var number = 20;
  
  print(name3.runtimeType);
}
void main() {
  // 글자 타입
  // String 
  String name = "소녀시대";
  String name2 = '하하';
  
  print(name + ' ' + name2);
  print('${name}');
}
void main() {
  // dynamic : 어떤 타입을 넣을 수 있다.
  
  dynamic name = '소녀시대';
  print(name);
  
  dynamic number = 1;
  
  print(number);
  
  var name2 = '블랙핑크';
  print(name2);
  
  // var타입은 한번 선언하면 다른 타입으로 변경이 불가능
  // dynamic은 계속 바꿀 수 있다.
  
}
void main() {
  // nullable - null이 될 수 있다.
  // non-nullable - null이 될 수 없다.
  // null - 아무런 값도 있지 않다.
  
  String name = '소녀시대';
  
  print(name!);
  // ! null 이 들어갈 수 없다.
  
  String? name2 = '블랙 핑크';
  //데이터 타입 뒤에 ?을 붙이면 null도 허용
  
  name2 = null;
  
  print(name2);
}
void main() {
  final String name = '소녀시대';
  // final을 선언하면 값을 변경할 수 없다.
  // final name = '소녀시대';
  print(name);
  
  const String name2 = '블랙핑크';
  // const도 변경할 수 없다.
  /// const name2 = '블랙핑크';
  
  print(name2);
  
  // final, const를 사용하면 var 기능을 하기에 생략도 가능
  
}
void main() {
  DateTime now = DateTime.now();
  print(now);
  
  DateTime now2 = DateTime.now();
  print(now2);
  
  // const는 빌드 타입에 값을 알아야한다.
  // final은 빋드 타입을 몰라도 상관없다.
}
void main() {
  
  int number = 2;
  
  print(number % 2);
  print(number % 3);
  
  number++;
  
  print(number);
  
  number--;
  print(number);
  
}
void main() {
  double number = 4.0;
  
  number = number + 1;
  number += 1;
  
  print(number);
}
void main() {
  //null
  double? number = 4.0;
  
  number = null;
  
  number ??= 3.0;
  // 만약에 number값이 null이면 오른쪽 값을 출력해라
  
  print(number);
}
void main() {
  int number = 1;
  int number2 = 2;
  
  print(number > number2);
  print(number < number2);
  print(number >= number2);
  print(number <= number2);
  print(number == number2);
  print(number != number2);
}
void main() {
  int number = 1;
  
  print(number is int);
  print(number is! int);
}
void main() {
  // && - and 조건
  // || - or 조건
  
  bool result = 12 > 10 && 1 > 0 && 3 > 0;
  print(result);
  
  bool result2 = 12 > 10 && 0 > 1;
  
  print(result2);
  
  bool result3 = 12 > 10 || 1 > 0;
  print(result3);
  
  bool result4 = 12 > 10 || 0 > 1;
  print(result4);
}
void main() {
  // List
  // 리스트
  List<String> blackPink = ['제니', '지수', '로제', '리사'];
  List<int> numbers= [1,2,3,4,5];
  
  print(blackPink);
  print(numbers);
  
  print(blackPink.length);
  
  blackPink.add('윤아');
  
  blackPink.remove('지수');
  
  print(blackPink);
  print(blackPink.indexOf('로제'));
  
  //index
  //순서
  //0 부터 시작
  print(blackPink[3]);
  
}
void main() {
  // 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,
    'Iroman' : false
  };
  
  print(isHarryPotter);
  
  isHarryPotter.addAll({
    'Spiderman' : false,
  });
  
  print(isHarryPotter);
  
  print(isHarryPotter['Iroman']);
  
  isHarryPotter['Hulk'] = false;
  
  print(isHarryPotter);
  
  isHarryPotter['Spiderman'] = true;
  print(isHarryPotter);
  
  isHarryPotter.remove('Harry Potter');
  print(isHarryPotter);
  
  print(isHarryPotter.keys);
  print(isHarryPotter.values);
}

list와, set에 차이는 set은 중복을 자동으로 처리해준다.

void main() {
  //set
  final Set<String> names = {
    'code Factory',
    'Flutter',
    'Balck Pink',
    'Flutter',
  };
  
  print(names);
  
  names.add('Jenny');
  
  print(names);
  
  names.remove('Flutter');
  
  print(names);
  
  print(names.contains('Jenny'));
}
void main() {
  // if 문
  
  int number = 3;
  
  if(number % 2 == 0){
    print('값이 짝수 입니다.');
  } else{
    print('값이 홀수 입니다.');
  };
}



void main() {
  // if 문
  
  int number = 3;
  
  if(number % 3 == 0){
    print('나머지가 0입니다.');
  }else if(number % 3 == 1){
    print('나머지가 1입니다.');
  } else{
    print('나머지가 2입니다.');
  };
}
void main() {
  // switch 문
  int number = 3;
  
  switch(number % 3){
    case 0:
      print('나머지가 0입니다.');
      break;
      
    case 1:
      print('나머지가 1입니다.');
      break;
      
    default:
      print('나머지가 2입니다.');
      break;
      
  };
}
void main() {
  // for loop
  
  int total = 0;
  int i;
  
  List<int> numbers = [1,2,3,4,5,6];
  
  for(i = 0; i < numbers.length; i++){
    total = total + numbers[i];
  }
  
  print(total);
  
  total = 0;
  
  for(int number in numbers){
    total += number;
  };
  
  print(total);
}
void main() {
  // while loop
  
  int total = 0;
  
  while(total < 10){
    total += 1;
  };
  
  print(total);
  
  total = 0;
  
  do {
    total +=1;
  } while(total < 10);
  
  print(total);
}


void main() {
  // while loop
  
  int total = 0;
  
  while(total < 10){
    total += 1;
    
    if(total == 5){
      break;
    }
  };
  
  print(total);
}
void main() {
  //continue
  
  for(int i = 0; i< 10; i++){
    if(i == 5){
      continue;
      // 현재 룹만 Skip
    }
    print(i);
  };
}
enum Status{
  approved, //승인
  pending, //대기
  regected, // 거절
}  // 정확히 몇가지 타입만 있을 때 사용가능하다.

void main() {
  Status status = Status.approved;
  
  if(status == Status.approved){
    print('승인입니다.');
  } else if(status == Status.pending){
    print('대기입니다.');
  } else {
    print('거절입니다.');
  }
}
// 함수는 반복되는 코드를 한번만 사용하고 재활용하는 기능
void main() {
  addNumbers();
}

// 세개의 숫자 (x, y, z)를 더하고 홀수인지 알려주는 함수
addNumbers(){
  int x = 10;
  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('홀수입니다.');
  }
}


// 함수는 반복되는 코드를 한번만 사용하고 재활용하는 기능
// void - 공허
// String, int, boolean 등 return을 사용하는 메소드와 
// void를 사용해 return이 없는 메소드로 나뉘어진다.
// void 타입을 사용하지 않을 경우 반드시 return 값을 반환해야 한다.
// return이란? : 메소들 수행하면 String 타입으로 반환한다 했으니 반드시 메소드에 String 타입의 값을 반환해야 한다.
// void 타입은 아무것도 반화하지 않는다는 말이기 때문에 뭔가를 반환할 필요가 없다.

void main() {
  int result = addNumbers(10, y: 20);
  
  addNumbers(10, y: 20, z: 70);
  
  print(result);
}

// 세개의 숫자 (x, y, z)를 더하고 홀수인지 알려주는 함수
// parameter / argument - 매개변수
// positional parameter - 순서가 중요한 파라미터
// optional parameter - 있어도 되고 없어도 되는 파라미터
// named parameter - 이름이 있는 파라미터 (순서가 중요하지 않다.) 
// arrow function - 화살표 함수

int addNumbers(int x, { required int y,  int z = 30}) {
  int sum = x + y + z;

  print('x : $x');
  print('y : $y');
  print('z : $z');

  if (sum % 2 == 0) {
    print('짝수입니다.');
  } else {
    print('홀수입니다.');
  }
  
  return sum;
}


// arrow function - 화살표 함수

int addNumbers(int x, { required int y,  int z = 30}) => x + y + z;

 

typedef를 사용하면 함수의 타입을 명확하게 표현할 수 있어 가독성이 높아지고, 특정 타입을 가진 함수를 많이 사용하는 경우 간결한 코드를 작성할 수 있습니다.

list 혹은 map, set 등의 타입으로 함수의 반환값을 정하면 그 구조가 복잡해질 수 있습니다. 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(10, 20, 30, add);
  print(result3);
  
  int result4 = calculate(40, 50, 60, subtract);
  print(result4);
}

// 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);
}

 

728x90