다트에서 모든 자료형은 object로 이루어져 있다. (다트는 진정한 객체지향언어)
void main(){
String name='nico';
bool alive=true;
int age=20;
double money=69.99;
//int,double의 부모class는 num
num x=12;
x=12.11;
//자료형 안에 어떤게 있는지 확인가능
print(name.isEmpty);
}
List
void main(){
var numbers1=[1,2,3];
List<int> numbers2=[1,2,3];
numbers1.add(4);//숫자만 추가가능
}
- main내에선 주로 var로 선언, class 선언시에만 주로 List<타입> 선언
- 다트에서 List는 collection if, collection for을 지원한다.
Collection if: List 생성 시 조건에 따라 element를 추가
- 메뉴 or navigation bar를 만들 때 유저의 로그인여부에 따라 나타나는 버튼 추가시 유용
void main(){
var giveMeFive=true;
var numbers1=[
1,
2,
3,
4,
if(giveMeFive) 5,
];
/*
* if(giveMeFive){
numbers.add(5);
}
* */
}
String interpolation: text에 변수를 추가하는 방법
- 단순히 변수값을 담고싶으면 → $뒤에 바로 변수
- 계산을 하고싶으면 → ${계산식}
void main(){
var name='nico';
var age=20;
var greeting='Hello my name is $name, and I\'m ${age+4}';
print(greeting);
}
Collection for
void main(){
var oldFriends=['nico','lynn'];
var newFriends=[
'lewis',
'ralph',
'john',
for(var friend in oldFriends) '옛친구 $friend',
];
/*
* for(var friend in oldFriends){
* newFriends.add('옛친구 $(friend)')
* }*/
print(newFriends); //[lewis, ralph, john, 옛친구 nico, 옛친구 lynn]
}
Maps
- 다트에서의 Map은 js의 object, python의 dictionary와 유사함
- Maps도 method, property를 지님
var player={
'name':'nico',
'xp':19.99,
'superpower':false,
};
//player의 자료형: Map<String,Object>
다음과 같이 명시도 가능
Map<int,bool> player={
1:true,
2:false,
3:true
};
복잡한 key도 가능
Map<List<int>,bool> player={
[1,2,3,4]:true,
};
void main(){
List<Map<String,Object>> players=[
{ 'name':'nico', 'xp':19.99 },
{ 'name':'nicol', 'xp':29.99 },
];
}
- 그러나, dictionary를 만드는 방식으로 Maps를 추천하지 않는다.
- {key:value}가 있는 player나 movie처럼 API 구조의 데이터라면 class 사용이 권장된다.
Sets
- Set과 List의 차이점은 Set에 속한 모든 아이템들은 유니크하다는 점이다. (python의 set)
- 요소가 항상 하나씩만 있어야 할 때 사용하면 된다.
void main(){
var numbers1={1,2,3,4};
Set<int> numbers2={1,2,3,4};
numbers1.add(1);
print(numbers1); //{1,2,3,4}
}