Python
의 셋 자료형과 동일. 데이터의 순서가 없으며, 중복 허용 불가.Python
의 딕셔너리 자료형과 동일. 데이터의 순서가 없으며, 키는 중복 불가, 값은 중복 가능.~/
: int형 나눗셈, typecast to int
(a / b).truncate().toInt()
와 동일 (버림 -> int typecast
main() {
double a = 3.0;
double b = 1.5;
print(a / b); // 2
}
as : 형 변환
is :
is!
Null safety는, null
값을 완전 제거하는 것이 목적이 아님. null
자체는 코드에서 문제가 되지 않으나, null
을 통한 메소드 호출이 코드에서는 문제가 됨.
bool isOnlyWhitespace(String string) {
return string.trim() == '';
}
main(){
isOnlyWhitespace(null); // Error
}
위 예시에서, string
변수에 null
값 자체가 문제를 일으키는 것이 아니라, null
이 호출하는 trim() 메소드가 문제를 일으킴.
변수는 null
값을 초기화 값이나, 특정 자료형으로 받을 수 없음.
null
값을 변수에 넣어주기 위해선, null safety 규칙을 지켜야 함.
즉, null safety는 어떤 객체(변수)가 null 값을 허용할 수 있는지, 허용 할 수 없는지 구분하기 위해서 사용함.
위 예시의 isOnlyWhitespace
메소드에서 string
Parameter는 null
값을 허용하지 않는 Non-nullable 변수임. (null
대입 시 컴파일러 에러)
Non-nullable
변수는 정의 동시에 초기화 되어야 함.( null
값을 허용하지 않음)void main(){
double nonNullable;
double? nullable;
nullable = null; // OK
nonNullable = null; // Error
}
??
, 좌항 ?? 우항
-> 좌항의 값이 null이면 우항의 값을 return.
->if null
로 해석
main(){
String name;
print(name ?? "비어있습니다."); // 비어있습니다.
}
Non-nullable
해야 함.좌항 ?. 우항 : 좌항(객체)이 null이면 null을, 아니면 우항을 return
someObject?.someProperty
// same as
(someObject != null) ? someObject.someProperty : null
// 아래처럼, null인 객체가 들어오더라도, null 처리를 할 수 있다.
void main(){
var p = null;
print(p?.name); // null
}
TODO
Future
Future networkRequest() async {
print('start');
await Future.delayed(Duration(seconds : 1));
print('1');
await Future.delayed(Duration(seconds : 1));
print('1');
}
void main() {
print('시작');
networkRequest(); // Asynchronous function
print('끝');
}
Stream