본문 바로가기
모바일 공부/Flutter

flutter SpreadOperator,Cascade 스프레드,캐스케이드 연산자 알아보기

by chogigang 2024. 1. 23.

 이건 플러터의 기능보다는 Dart 의 기능입니다 . 자바 스크립이나 리엑트 프론트 단에서도 사용 하는 기술로 알려져 있습니다 

 변수 앞에 ... 을 사용합니다.

 

이것은 list 안에 list 를 넣는 행위랑 똑같습니다 

스프레드 연산자 

  • 스프레드 연산자(...)는 컬렉션을 펼쳐주는 연산자
  • 다른 컬렉션 안에 컬렉션을 삽입할 때 사용
  var items = ['모니터', '키보드', '마우스'];
  
  var items2 = ['스피커', ...items, '헤드셋'];  //스피커, 모니터, 키보드, 마우스, 헤드셋

 

  • Set에 리스트를 담으면 자동으로 중복 제거
  final items = [1, 2, 2, 3, 3, 4, 5];
  
  final myNum = {...items, 6, 7}; //1, 2, 3, 4, 5, 6, 7

 

 

 

캐스케이드 연산자

점을 2개 ..을 사용도 가능합니다.   이것을 캐스케이드 연산이라고 합니다 .

이를 계단식 표현법이라고 합니다 반복되는 코드를 줄이기 위해 사용되는 문법입니다.  아래는 공식문서에서 가지고온 문법 예제입니다.

 

 
class User{
  String name = ''; 
  int age = 0;
}

void main() {
  User user = User(); 
  user.name = '홍길동';
  user.age = 23; 
  
  User user1 = User()
    ..name = '김철수'
    ..age = 23;
}

 

이렇게 앞 중복되는 문법을  ..으로 스킵하고 빠르게 코드를 작성할수 있습니다.  캐스케이드 사용시 주의 할점은 공식문서에서 이렇게 말합니다. 

 

캐스케이드(..)를 사용할 때 주의할 점은 객체를 반환하는 함수만이 사용 가능합니다.

var sb = StringBuffer();
sb.write('foo')
..write('bar'); // Error: method 'write' isn't defined for 'void'.

 

write 함수는 리턴 값이 void형이기 때문에 에러가 발생합니다.

var sb = StringBuffer();
var returnWrite = sb.write('foo');  //write에서 리턴되는 변수는 없기때문에 1차 문제가 되고
// write함수에서 리턴된 변수의 없는 멤버 write라는 함수에 접근하려고 하니 에러가 발생한다.
returnWrite.write('bar');  //에러 발생

 

만약 위의 코드를 제대로 사용하려면 아래와 같이 구성하면 됩니다.

var sb = StringBuffer()
           ..write('foo')
           ..write('bar');

'모바일 공부 > Flutter' 카테고리의 다른 글

ListView  (0) 2024.03.19
UUID  (0) 2024.03.19
flutter ROW, COLUMN 알아보기  (1) 2024.01.08
StatelessWidget,StatefulWidget 알아보기  (0) 2024.01.05
flutter 이미지 업로드  (0) 2024.01.05