Develop/Flutter

다트 문법 정리 (2)

HaeYoung_12 2024. 8. 6. 16:49

1. 컬렉션

여러값을 하나의 변수에 저장할수 있는 타입으로
서로의 타입으로 자유롭게 형변환이 가능하다는 장점이 있다.

1) List

  • 여러값을 순서대로 한 변수에 저장할때 사용됨

  • 원소-> 리스트의 구성단위

  • 리스트명[인덱스]리스트 관련 함수

    • add
    • where
    • map
    • .toList()
    • reduce
    • fold
    void main(){
    
    //add()한수
    // List에 값 추가할떄 사용
    blackPinkList.add('ick');//리스트 끝에 추가
    print(blackPinkList);
    
    //where 함수
    // List에 있는 값들을 순서대로 순회하면서 특정조건에 맞는 값만 필터링하는데 사용
    // 매개변수에 함수를 입력하고 입력된 함수는 기종 값을 하나씩 매개 변수로 입력받아
    // true 반환시 값이 유지되고 false를 반환하면 값을 버림
    // 순회가 끝난후 유지된 값들을 기반으로 이터러블 반환
    
    final newList=blackPinkList.where(
        (name)=> name=='리사'|| name=='지수',); //리사 또는 지수 유지
    
    print(newList);
    print(newList.toList());
    
    // map 함수
    // 리스트에 있는 값들을 순서대로 순회하면서 값을 변경가능
    // 매개변수에 함수를 입력해야하며 입력된 함수는 기본값들을 매개변수로 받음
    // 이터러블로 반환
    
    final newMapList=blackPinkList.map(
        (name)=>'블랙핑크 $name',
    ) ;
    print(newMapList);
    
    //Iterable 을 다시 List로 변환하고 싶을때 .toList()사용
    print(newMapList.toList());
    
    //reduce함수
    // List에 있는 값들을 순회하면서 값을 쌓아감.
    // List의 멤버타입과 같은 타입을 반환
    
    final allMembers=blackPinkList.reduce(
    (value,element)=>value+', '+element,
    );
    //1. value:리사 element:지수
    //2 value :리사,지수 element:제니
    //3. valur:리사,지수,제니 element :로제
    //4. value :리사,지수,제니, 로제 element:ick
    
    print(allMembers);
    
    //fold 함수
    // reduce함수와 실행되는 논리는 같지만 fold함수는 어떤 타입이든 반환가능하다.
    final allMemberCount=blackPinkList.fold<int>(0,(value,element)=>value+element.length);
    print(allMemberCount);
    }

2) Map 타입

  • 키와 값의 짝을 저장함
  • 키를 이용해 원하는 값을 빠르게 찾는데 중점을 둠
  • Map<키의 타입,값의 타입>맵이름
    void main(){ List <String> blackPinkList=['리사','지수','제니','로제'];
    print(blackPinkList); print(blackPinkList[0]); //첫원소 지정 
    print(blackPinkList[3]);//마지막 원소 지정 
    print(blackPinkList.length);//리스트 길이 반환
    blackPinkList[3]='코드팩토리';//인덱스값 변경
    print(blackPinkList);
    } 
    void main(){ 
    Map<String,String> dictionary={ 
    'Harry Poter':'해리포터',
    'Ron Weasley':'론위즐리', 
    'Hermione Granger':'헤르미온느 그레인저',
    }; 
    print(dictionary['HarryPoter']);
    print(dictionary['Hermione Granger']); //키값 반환하기 //Iterable가 반환되기에 .toList()사용가능 print(dictionary.keys); print(dictionary.values); 
    }```
    

3) Set 타입

  • 중복 없는 값들의 집합

  • Set<타입>세트이름

    void main(){
    Set<String> blackPink={'로제','지수','지수','제니','제니'};
    print(blackPink);
    print(blackPink.contains('로제'));//값이 있는지 확인 bool값 반환
    print(blackPink.toList()); //Set-> List변환
    List<String> blackPink2=['로제','지수','제니'];
    print(Set.from(blackPink2)); // List-> Set 변환
    }```

4) enum

  • 한변수의 값을 몇가지 옵션으로 제한하는 기능

선택지가 제한적일때 사용

2. 연산자

1. 기본 수치 연산자

void main(){ 
    double number=2;
    print(number+2);
    print(number-2);
    print(number*2);
    print(number/2);
    print(number%3);
    //단항 연산자
    number++;
    number--;
    number+=2; 
    number-=2;
    number*=2;
    number/=2;
}

2) null 관련 연산자

  • null: 아무것도 없음
  • 타입뒤에 ? 를 추가해야 null값이 저장될수 있음.
  • null를 가잘수 있는 변수에 새로운 값을 추가할때 ??을추가시, 기존에 null인 때에만 새로운 값이 저장되도록할수 있음.
void main(){ 
    double? number1=1;
    number1=null; 
    print(number1);
    double? number2=null;
    number2 ??=3; 
    print(number2);
    number2 ??=4; //이전값이 null이 아니라 3이 유지됨.
    print(number2);
}

3) 값 비교 연산자

void main(){ 
    int number3=1;
    int number4=2;
    print(number3>number4);
    print(number3<number4);
    print(number3>=number4);
    print(number3<=number4);
    print(number3==number4);
    print(number3!=number4);
}

4) 타입 비교 연산자

void main(){
    print(number3 is int);
    print(number3 is String); 
    print(number3 is! int);
    print(number3 is! int);
}

5) 논리 연산자

  • && -> and
  • || -> or
  • void main(){ bool result1 =12>10&& 1>0; // 12가 10보다 크고 1이 0보다 클때 bool result2=12>10|| 1<0; // 12가 10보다 크고 1이 0보다 클때 print(result1); print(result2); }