Flutter/Flutter 기본

[Flutter] switch-case Distructure(구조분해)

Chafle 2023. 8. 9. 17:34
반응형

값을 받아올 때 값을 분해한 상태로 가져온다

void main() {
  
  // Validation
  final minJi = ('민지', 20);
  //타입을 보장받고 싶은 경우 as로 캐스팅
  final (name as String, age as int) = minJi;
  
  print(name);
  print(age);

   }

위와같은 경우 minJi의 구조가 String, int로 캐스팅 돼서 name에는 minji, age에는 20이 출력된다.

 

 

 


 

 

void switcher(dynamic anything) { 
switch(anything) {
  case 'aaa' : 
    print('match:aaa');
    
    //distructure
  case ['1','2'] :
    print('match [1,2]');
    
    //list인데 3개의 값이면 어떤 값이면 된다는 의미
  case [_,_,_] :
    print('match: [_,_,_]');
    
  case [int a,int b] :
    print('match: int$a, int$b');
    
  case <10 && >5:
    print('match < 10 && >5');
    
  default :
    print('no match');
  }
}

 

결과 확인

 

   switcher('aaa');
   switcher(['1','2']);
   switcher([1,2,3]);
   switcher([6,7]);
   switcher(7);

 

 

 



    
  forLooper();
  
  ifMatcher();
}


다른 형태로서의 활용 

 

 

함수의 body대신에 =>(애로우)를 넣은 것처럼, 반환하고자 하는 것도 마찬가지로 =>(애로우) 사용 가능

String switcher2(dynamic val, bool condition) => switch(val) { 
	5 => 'match: 5',
    
//조건문을 넣자 -> condition이 true이고, val이 7일때 => 반환해라
    7 when condition => 'match 7 and true',

//default 표기
  _=> 'no match'
   
};
  print(switcher2(5, true));
  print(switcher2(7, true));
  print(switcher2(7, false));

 

 


for loop을 이용하여 distructure

void forLooper() { 
final List<Map<String, dynamic>> members = [
  {
    'name' : '민지',
      'age' : 20,
  },
   {
    'name' : '혜린',
      'age' : 19,
  }
];


//일반적
for(final member in members) {
    print(member['name']);
    print(member['age']);
  }
  
// distructuring
//distructure할 때는 key값은 무조건 선언해줘야댐

  for(var {'name' : name, 'age': age } in members) {
   print(name);
   print(age);
  }
}


 

 


 

if문을 통한 distructure

  
   //if문을 쓸건데 minji를 구조를 validation함과 동시에 distructure하고싶다면
  //만약 age가 int가 아니고 string'20'이였다면, if 조건이므로 아예 프린트하지 않음
 

void ifMatcher() {
  final minji = {
    'name' : '민지',
    'age' : 20,
  };
  
   if(minji case{'name': String name, 'age': int age}) {
    print(name);
    print(age);
  }
}



반응형