λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
웹곡뷰/flutter

dart 기초

by 이노킀_ 2023. 7. 4.

var, dynamic

varλŠ” 자유둜운 νƒ€μž…μœΌλ‘œ λ³€μˆ˜λ₯Ό μ €μž₯ν•  수 μžˆμ§€λ§Œ μ²˜μŒμ— μ €μž₯된 λ³€μˆ˜μ˜ νƒ€μž…λ§κ³  λ‹€λ₯Έ νƒ€μž…μ€ μ €μž₯될수 μ—†μŒ

dynamic은 μ²˜μŒμ— μ €μž₯된 νƒ€μž…κ³ΌλŠ” 상관없이 무슨 νƒ€μž…μ΄λ“  μ €μž₯ κ°€λŠ₯

var name = 'abc';
name = 'ddd'; 
name = 3; //error

dynamic name2 = 'abc';
name2 = 'ddd';
name2 = 3; //ok

const, final

μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜μ§€ μ•Šμ€ μƒνƒœμ—μ„œ 값이 ν™•μ •λ˜λ©΄ const, μ‹€ν–‰λ λ•Œ ν™•μ •λ˜λ©΄ final

final DateTime now = DateTime.now(); //λŸ°νƒ€μž„ μƒμˆ˜
const DateTime now2 = DateTime.now(); //error. λΉŒλ“œνƒ€μž„ μƒμˆ˜μž„. λΉŒλ“œνƒ€μž„μ— 값을 μ•Œμ•„μ•Όν•˜λŠ”λ° DateTime.now()
									//λŸ°νƒ€μž„μ— λ°˜ν™˜λ˜λŠ” 값을 μ•Œ 수 μžˆμ–΄μ„œ μ—λŸ¬

μ»¬λ ‰μ…˜

 List : μ—¬λŸ¬κ°’을 μˆœμ„œλŒ€λ‘œ μ €μž₯
 Map : νŠΉμ • ν‚€κ°’을 κΈ°λ°˜μœΌλ‘œ λΉ λ₯΄κ²Œ κ°’을 κ²€μƒ‰
 Set : μ€‘λ³΅λœ λ°μ΄ν„° μ œκ±°
 -> μ»¬λ ‰μ…˜ νƒ€μž…은 μ„œλ‘œμ˜ νƒ€μž…μœΌλ‘œ μžμœ λ‘­κ²Œ ν˜•λ³€ν™˜ κ°€λŠ₯

 

where

μˆœνšŒν•˜λ©΄μ„œ νŠΉμ • 쑰건에 λ§žλŠ” κ°’λ§Œ ν•„ν„°λ§ν•˜λŠ”λ° μ‚¬μš©

parameter : ν•¨μˆ˜

return : trueλ₯Ό λ¦¬ν„΄ν•˜λ©΄ 값을 μœ μ§€, falseλ©΄ 값을 버림. iterable λ°˜ν™˜

void main(){

  List<String> list = ['a', 'b', 'c'];

  final newList = list.where((element) => element == 'a' || element == 'c');
  //newListλŠ” iterable.
  print(newList.toList());
}

 

map()

μˆœνšŒν•˜λ©΄μ„œ 값을 λ³€κ²½ν•  수 있음. 

parameter : ν•¨μˆ˜. κΈ°μ‘΄ 값을 ν•˜λ‚˜μ”© λ§€κ°œλ³€μˆ˜λ‘œ λ°›μŒ.

return : λ°˜ν™˜ν•˜λŠ” 값이 ν˜„μž¬κ°’μ„ λŒ€μ²΄ν•˜λ©° μˆœνšŒκ°€ λλ‚˜λ©΄ iterable λ°˜ν™˜

void main(){

  List<String> list = ['a', 'b', 'c'];

  final mapList = list.map( (e) => 'map-$e');
  print(mapList);
}

reduce()

μˆœνšŒν•˜λ©΄μ„œ 값을 μŒ“μ•„κ°

parameter : ν•¨μˆ˜, 이 ν•¨μˆ˜λŠ” λ§€κ°œλ³€μˆ˜ 2개λ₯Ό μž…λ ₯ λ°›μŒ. μˆœνšŒκ°€ 처음 μ‹œμž‘λ  λ•Œ 첫번째 λ§€κ°œλ³€μˆ˜ valueλŠ” 리슀트의 μ²«λ²ˆμ§Έκ°’, 'a'λ₯Ό λ°›κ²Œ 되고 λ‘λ²ˆμ§Έ λ§€κ°œλ³€μˆ˜ elementλŠ” 'b'λ₯Ό λ°›κ²Œλ¨. 첫번째 μˆœνšŒμ΄ν›„λ‘œλŠ” 첫번째 λ§€κ°œλ³€μˆ˜μ— κΈ°μ‘΄ μˆœνšŒμ—μ„œ λ°˜ν™˜ν•œ 값이 첫번째 λ§€κ°œλ³€μˆ˜μ— μž…λ ₯되고 λ¦¬μŠ€νŠΈμ—μ„œ λ‹€μŒ 값이 'c'κ°€ λ‘λ²ˆμ§Έ λ§€κ°œλ³€μˆ˜μ— μž…λ ₯됨.

return : list νƒ€μž… λ°˜ν™˜

void main(){

  List<String> list = ['a', 'b', 'c'];

  final allList = list.reduce((value, element) => value + ',' + element);
  print(allList);
}

fold()

reduce()와 논리가 λ˜‘κ°™μŒ. λ‹€λ§Œ reduceλŠ” listμ•ˆμ˜ λͺ¨λ“  μš”μ†Œκ°€ 같은 νƒ€μž…μ΄μ–΄μ•Ό ν•˜μ§€λ§Œ foldλŠ” νƒ€μž…μ΄ λͺ¨λ‘ 달라도 μƒκ΄€μ—†μŒ

parameter : μ‹œμž‘ν•  κ°’, ν•¨μˆ˜. 첫번째 μˆœνšŒλ•Œ 리슀트의 첫 번째 값이 μ•„λ‹Œ fold()ν•¨μˆ˜μ˜ 첫번째 λ§€κ°œλ³€μˆ˜μ— μž…λ ₯된 값이 μ΄ˆκΈ°κ°’μœΌλ‘œ μ‚¬μš©λ¨

void main(){

  List<String> list = ['a', 'b', 'c'];

  final foldList = list.fold<int>(0, (value, element) => value+element.length);
  print(foldList);
}

 

enum

λ³€μˆ˜μ˜ 값을 λͺ‡κ°€μ§€ μ˜΅μ…˜μœΌλ‘œ μ œν•œν•˜λŠ” κΈ°λŠ₯. 선택지가 μ œν•œμ μΌ λ•Œ μ‚¬μš©

enum Status{
  approved,
  pending,
  rejected
}

void main(){

  Status status = Status.approved;
  print(status);
}

nullκ΄€λ ¨ μ—°μ‚°μž

λ‹€νŠΈμ—μ„œλŠ” λ³€μˆ˜νƒ€μž…μ΄ null값을 κ°€μ§€λŠ”μ§€ μ—¬λΆ€λ₯Ό 직접 μ§€μ •ν•΄μ€˜μ•Όν•¨

νƒ€μž… ν‚€μ›Œλ“œλ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜λ©΄ 기본적으둜 null이 μ €μž₯될 수 μ—†μŒ

νƒ€μž…λ’€μ— '?'λ₯Ό μΆ”κ°€ν•΄μ•Ό null값이 μ €μž₯될수 있음

void main(){
  double? number = 1;
  number = null;
  
  double number2 = null; //error
}

'??' : null을 κ°€μ§ˆμˆ˜ μžˆλŠ” λ³€μˆ˜μ— μƒˆλ‘œμš΄ 값을 μΆ”κ°€ν•  λ•Œ '??'을 μ‚¬μš©ν•˜λ©΄ 기쑴에 null인 λ•Œλ§Œ 값이 μ €μž₯λ˜λ„λ‘ ν•  수 있음

void main(){
    double? number; //μžλ™μœΌλ‘œ null지정
    print(number);

    number ??= 3; //??λ₯Ό μ‚¬μš©ν•˜λ©΄ κΈ°μ‘΄ 값이 null일 λ•Œλ§Œ μ €μž₯됨
    print(number);

    number ??=4; //null이 μ•„λ‹ˆλ―€λ‘œ 3이 μœ μ§€λ¨
    print(number);
}

νƒ€μž… 비ꡐ μ—°μ‚°μž

void main(){
    int number = 1; 
    print(number is int); //true
    print(number is String); //false
    print(number is! int); //false
    print(number is! String); //true
}

for loop

void main(){

  List<int> list = [1,2,3];
  for(int number in list){
    print(number);
  }
}

ν•¨μˆ˜

positional parameter : μˆœμ„œκ°€ κ³ μ •λœ λ§€κ°œλ³€μˆ˜(ν”νžˆ λ³΄λŠ” ν˜•νƒœμ˜ ν•¨μˆ˜)

named parameter: 이름이 μžˆλŠ” λ§€κ°œλ³€μˆ˜, 킀와 κ°’ ν˜•νƒœλ‘œ λ§€κ°œλ³€μˆ˜λ₯Ό μž…λ ₯ν•˜λ©΄ λ˜λ―€λ‘œ μˆœμ„œλŠ” μƒκ΄€μ—†μŒ. 

required ν‚€μ›Œλ“œλŠ” λ§€κ°œλ³€μˆ˜κ°€ null값이 λΆˆκ°€λŠ₯ν•œ νƒ€μž…μ΄λ©΄ 기본값을 μ§€μ •ν•΄μ£Όκ±°λ‚˜ ν•„μˆ˜λ‘œ μž…λ ₯ν•΄μ•Όν•œλ‹€λŠ” 의미

int add({
  required int a,
  required int b
}){
  return a+b;
}
void main(){
  print(add(a: 3,b: 10));
}
int add2(int a, [int b = 2]){ //기본값을 κ°–λŠ” positional prameter
  return a+b;
}

void main(){
  print(add2(3));
}

positional parameter와 named parameterλ₯Ό μ„žμ–΄ μ‚¬μš©ν• μˆ˜λ„ 있음. μ„žμ–΄ μ“Έ λ•ŒλŠ” positional parameterκ°€ λ°˜λ“œμ‹œ λ¨Όμ € 와야함.

int add3(int a, {required int b, int c=4,}){
  return a+b+c;
}

void main(){
  print(add3(1, b:3, ));
}

읡λͺ…ν•¨μˆ˜μ™€ λžŒλ‹€ν•¨μˆ˜

λ‘˜λ‹€ ν•¨μˆ˜μ΄λ¦„μ΄ μ—†μŒ. μΌνšŒμ„±μœΌλ‘œ μ‚¬μš©λ¨. λ‹€νŠΈμ—μ„œλŠ” λ”°λ‘œ κ΅¬λΆ„ν•˜μ§€ μ•ŠμŒ

읡λͺ…ν•¨μˆ˜ λžŒλ‹€ν•¨μˆ˜
(λ§€κ°œλ³€μˆ˜){
  ν•¨μˆ˜λ°”λ””
}
(λ§€κ°œλ³€μˆ˜) => 단 ν•˜λ‚˜μ˜ μŠ€ν…Œμ΄νŠΈλ¨ΌνŠΈ

λžŒλ‹€ν•¨μˆ˜λŠ” ν•˜λ‚˜μ˜ μŠ€ν…Œμ΄νŠΈλ¨ΌνŠΈλ§Œ 닀루기 λ•Œλ¬Έμ— κ°„κ²°ν•˜κ²Œ μ½”λ“œλ₯Ό μž‘μ„±ν• μˆ˜ μžˆλ‹€. 

μ½œλ°±ν•¨μˆ˜λ‚˜ 리슀트의 map(), reduce(), fold() ν•¨μˆ˜λ“±μ—μ„œ μΌνšŒμ„±μ΄ 높은 λ‘œμ§μ„ μˆ˜ν–‰ν• λ•Œ μ‚¬μš©

void main(){
  List<int> list = [1,2,3,4,5];

  final total = list.reduce((value, element) => value+element);
  print(total);
}

typedef ν‚€μ›Œλ“œ

ν•¨μˆ˜μ˜ μ‹œκ·Έλ‹ˆμ²˜(λ°˜ν™˜κ°’ νƒ€μž…, λ§€κ°œλ³€μˆ˜ κ°œμˆ˜μ™€ νƒ€μž… λ“±)λ₯Ό μ •μ˜ν•˜λŠ”κ°’. 즉 ν•¨μˆ˜ μ„ μ–ΈλΆ€λ₯Ό μ •μ˜ν•˜λŠ” ν‚€μ›Œλ“œ. ν•¨μˆ˜μ— λŒ€ν•œ μ •μ˜λŠ” μ—†μŒ.

λ‹€νŠΈμ—μ„œ ν•¨μˆ˜λŠ” μΌκΈ‰κ°μ²΄μ΄λ―€λ‘œ ν•¨μˆ˜λ₯Ό κ°’μ²˜λŸΌ μ΄μš©ν•  수 있음.

void add(int a, int b){
  print('add : ${a+b}');
}
void subtract(int a, int b){
  print('subract : ${a-b}');
}

typedef Operation = void Function(int x, int y);

void main(){
  Operation operation = add;
  operation(1, 2);
  operation = subtract;
  operation(5, 10);
}
void add(int a, int b){
  print('add : ${a+b}');
}
void subtract(int a, int b){
  print('subract : ${a-b}');
}

typedef Operation = void Function(int x, int y);
void calculate(int x, int y, Operation operation){
  operation(x, y);
}

void main(){
  calculate(1, 2, subtract);
}

 

 

 

 

λŒ“κΈ€