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