Dart의 자료형에는 String, bool, int, double 등이 있습니다. 만약 int나 double을 둘 다 사용할 수 있다면 num을 사용하면 됩니다.
list를 만드는 방법은 두 가지입니다. var 키워드를 사용하는 것과 타입을 지정하여 List 키워드를 사용하는 것입니다.
Dart의 List에는 collection if라는 것이 있습니다. 배열의 요소가 if 조건에 따라 값을 추가할지 말지 결정하는 것입니다.
void main() {
var numbers = [1,2,3,4];
List<int> numbers2 = [
1,
2,
3,
4,
if (true) 5,
];
}
문자열 중에 변수를 사용하고 싶다면 달러기호($)만 추가해주면 사용할 수 있습니다. 수식이 필요하다면 중괄호({})로 감싸고 계산식을 적어주면 됩니다. 만약 특수기호를 사용해야 한다면 역슬래시 기호()를 통해 표현할 수도 있습니다.
void main() {
var name = "sj";
var age = 26;
var greeting = 'Hello my name is $name, I\'m ${age + 2}'
}
collection if와 같이 여러개의 데이터를 갖는 배열을 추가하고 싶을 때는 collection for을 사용할 수 있습니다.
void main() {
var oldData = ['D','E']
nar newData = [
'A',
'B',
'C',
for(var data in oldData) "old Data $data"
]
}
Maps는 Javascript의 object와 비슷합니다.
void main() {
var player = {
'name':'sj',
'age':28,
};r
Map<int, bool> newPlayer = {
1: true,
2: false,
3: false,
};
}
Sets은 모든 요소가 중복을 허용하지 않습니다. 즉 집합입니다.
void main() {
var numbers = {1,2,3,4}
Set<int> numbers2 = {1,2,3,4}
}
함수가 무언가를 return 하지 않는다면 함수명 앞에 void를 붙입니다. 하지만 무언가를 return 한다면 함수의 타입을 정해주어야 합니다.
void sayHello(String name) {
print("hello $name");
}
void main() {
sayHello('sj')
}
밑의 경우처럼 함수의 parameter로 여러 개를 보낼 때 순서가 헷갈릴 수 있습니다.
String sayHello(String name, int age, String country) {
return "Hello $name, you are $age, and you come from $country";
}
void main() {
sayHello('sj', 28, 'Korea')
}
named argument를 활용하면 순서와 관계없이 작성할 수 있습니다. 사용할 함수의 인자를 중괄호로 감싸고 전달해주는 인자를 명시해주면 됩니다. 이때 인자가 필요한만큼 전달이 안될 수도 있기 때문에 default 값을 설정해주거나 파라미터 타입 앞에 required를 추가하는 것입니다.
String sayHello({required String name, int age, String country,}) {
return "Hello $name, you are $age, and you come from $country";
}
void main() {
print(sayHello(
age: 28,
name: 'sj',
country: 'Korea'
));
}
순서를 가지면서 인자를 필수로 포함하지않아도 된다면 다음과 같이 작성할 수 있습니다. Optional로 설정할 parameter를 대괄호로 감싸고 물음표를 붙여주고 default 값을 설정해주면 됩니다.
String sayHello(String name, int age, [String? country = '?']) {
return "Hello $name, you are $age, and you come from $country";
}
void main() {
sayHello('sj', 28)
}
A ?? B; 는 A가 null일 경우 B, A의 값이 있을경우는 A를 return 합니다.
String capitalizeName(String? name) => name?.toUpperCase() ?? 'ANON';
void main() {
capitalizeName('sj');
capitalizeName(null);
}
typedef 키워드를 통해 타입을 정의할 수 있습니다.
typedef myType = List<int>