print 함수를 통해 콘솔을 찍을 수 있다.(JS의 console.log)
dart는 뒤에 꼭 세미콜론을 붙여야 한다.
void main(){
print('hello world!'); //hellog world
}
var는 모든 타입을 할당할 수 있고 재할당 또한 가능하다. 하지만 첫 할당한 타입과 다른 타입으로 재할당이 불가능하다.
void main(){
var name = 'simon';
print(name); //simon
name = 1; //error🚨
}
dynamic은 어떤 타입이건 할당할 수 있다. 첫 할당한 타입과 다른 타입으로 재할당이 가능하다.
void main(){
dynamic text = 'hello';
text = 1;
text = true;
}
var와 dynamic은 모든 타입을 할당할 수 있는 공통점이 있다.
하지만 var는 초기화 시 타입을 추론하여 재할당 시 다른 타입으로 변경이 불가능하다.
dynamic은 동적으로 타입이 변경되어 재할당 시 다른 타입으로 변경이 가능하다.
runtimeType을 통해 변수의 타입을 확인할 수 있다.
void main(){
var idk = true;
print(idk.runtimeType); //bool
}
String 타입은 문자열만 할당할 수 있다. 문자를 더하면 문자가 합쳐진다.
${}
안 혹은 $
뒤에 변수를 넣어서 사용할 수도 있다. JS의 백틱(````)과 유사한것 같다.
void main(){
String text = 'hello';
String text2 = 'world'
print(text + ' ' + text2); //hello world
print('${text} ${text2}'); //hello world
print('$text $text2'); //hello world
}
int 타입은 정수만 할당할 수 있다.
void main(){
int num = 1;
print(num + num); //2
}
double 타입은 실수만 할당할 수 있다.
void main(){
double num = 0.5;
print(num + num); //1
}
bool 타입은 true, false만 할당할 수 있다.
void main(){
bool t = true;
bool f = false;
}
변수에 null
을 할당하면 에러가 발생한다. 하지만 타입뒤에 ?
를 붙이면 null
도 할당할 수 있게된다.
void main(){
String text = 'hello';
text = null; //error🚨
String? text2 = 'hello';
text2 = null;
}
타입 앞에 ?
를 사용하는 경우, 변수와 !
를 호출하면 현재 값이 null
이 아니라는 뜻이다.
void main(){
String? text = 'hello';
print(text!); //hello
}
List 타입은 <>
안에 나열할 값의 타입을 적어주면 된다. 만약 List에 설정한 타입과 다른 값이 있으면 에러가 발생한다. JS의 배열과 비슷하다.
void main() {
List<String> alphabet = ['a','b','c'];
pring(alphabet[1]); //b
}
add 메소드를 이용해 List에 값을 추가할 수 있다.
void main() {
List<String> alphabet = ['a','b','c'];
alphabet.add('d');
pring(alphabet); // [a, b, c, d]
}
remove 메소드를 이용해 특정 값을 제거할 수 있다.
void main() {
List<String> alphabet = ['a','b','c'];
alphabet.remove('a')
pring(alphabet); // [b, c, d]
}
indexOf 메소드를 통해 원하는 값의 인덱스를 구할 수 있다.
void main() {
List<String> alphabet = ['a','b','c'];
pring(alphabet.indexOf('c')); // 2
}
Map의 꺽쇠안에는 <key, value>의 타입을 넣어주면 된다. 대괄호를 통해 특정 값에 접근할 수 있다. (JS의 객체)
void main() {
Map<String, int> price = {
'staek': 120,
'pasta': 30,
};
print(price); //{staek: 120, pasta:30}
print(price['staek']); // 120
}
addAll 메소드로 Map안에 프로퍼티를 추가할 수 있다. 또는 그냥 할당해서 추가할 수도 있다.
void main() {
Map<String, int> price = {
'staek': 120,
'pasta': 30,
};
price.addAll({
'pizza': 20,
})
print(price); //{staek: 120, pasta: 30, pizza: 20}
price['soup'] = 5;
print(price); //{staek: 120, pasta: 30, pizza: 20, soup: 5}
}
remove 메소드로 특정 프로퍼티를 삭제할 수 있다.
void main() {
Map<String, int> price = {
'staek': 120,
'pasta': 30,
};
price.remove('pizza')
print(price); //{staek: 120}
}
keys 메소드로 Map의 keys만 얻을 수 있고, value 메소드로는 values를 얻을 수 있다.
void main() {
Map<String, int> price = {
'staek': 120,
'pasta': 30,
};
print(price.keys); // (staek, pasta)
print(price.values); // (120, 30)
}
List 처럼 값들을 나열할 수 있지만 다른점은 중복값이 포함 될 수 없다. 포함시켜도 자동으로 제거해준다. 대부분의 메소드는 List와 비슷하다.
void main() {
Set<int> price = {1,2,3};
print(price); // {1,2,3}
price.add(1);
print(price); // {1,2,3}
price.remove(3);
print(price); // {1,2}
}
contains 메소드로 Set내부에 특정값이 있는지 확인할 수 있다.
void main() {
Set<int> price = {1,2,3};
print(price.contains(1)); // true
}
타입 앞에 const 혹은 final을 붙이면 상수가 되어 재할당이 불가능해진다. 또한 식별자 앞에 타입을 쓰지 않아도 된다.
void main(){
const String text2 = 'text2';
text2 = 'string'; //error🚨
final String text = 'text';
text = 'string'; //error🚨
const text3 = 'ABC';
}
const: 컴파일 타임에 값 결정
final: 런타임에 값 결정
void main(){
const DateTime time1 = DateTime.now(); //error🚨
final DateTime time2 = DateTime.now();
}
DateTime.now()
는 함수를 실행한 순간의 시간을 반환한다. 그래서 컴파일 타임에 값이 결졍되는 const는 에러가 발생한다.
산술/ 할당/ 비교 연산자는 다른 언어들과 동일하다.
null 병합 연산자는 왼쪽 값이 null이 아니면 왼쪽 값을 반환, null이면 오른쪽 값을 반환한다.
void main(){
int? x;
int y = 10;
int z = x ?? y;
print(z); //10
}
null 병합 할당 연산자는 변수의 값이 null
이면 오른쪽 값을 할당한다.
// null일 경우
void main(){
double? number = 2;
print(number); //2
number = null;
print(number); // null
number ??= 100;
print(number); //100
}
// null이 아닐 경우
void main(){
double? number = 2;
print(number); //2
number ??= 100;
print(number); //2
}
is
앞에 변수가 is
뒤의 타입이면 true
를 아니면 false
를 반환한다. is
뒤에 !
를 붙이면 반대값이 나온다.
void main(){
String text = 'a';
print(text is String); //true
print(text is int); //false
print(text is! int); //true
}