해당 문법의 경우, 다른 언어를 통해 이미 알고 있거나 적지 않아도 될 부분은 넘어가도록 하겠다.
int age = null; //X
int? age; //O
String? name;
if(name != null){
String result = name;
}
String? str;
str ??= 'Hello';
//이것은 다음 코드와 같은 의미이다.
if(str == null){
str = 'Hello';
}
bool isClear = true;
var weather = isClear == true ? '맑음' : '흐림';
var paint = Paint();
paint.color = 'black';
paint.strokeCap = ;
//이 코드를 다음과 같이 사용할 수 있다.
var paint = Paint()
..color = 'black'
..strokeCap = ;
void main(){
num i = 10;
int ii = i as int;
}
void main(){
print(sum()); //0
}
int sum({int a = 0, int b = 0}){
return a+b;
}
int sum(int a, int b) => a+b;
void main(){
print(calc(10, 5, (a,b) => a+b));
}
int calc(int a, int b, {required Fuctional(int, int) callback}){
return callback(a,b);
}
//main 내부에서 내용이 길어진다면
void main(){
print(calc(10, 5, callback : (a,b){
return a+b;
});
}
void main(){
List<int> items = [1,2,3];
for(int item in items){ //in을 사용해서 표현이 가능하다.
print(item);
}
}
//forEach
items.forEach((e) {
print(e);
})
//이런식으로 알맹이 하나하나를 print를 하겠다는 의미이다.
//lamdba식
item.forEach((e) => print(e));
item.forEach(print);
//요소로 집어넣기
void main(){
List<int> items = [1,2,3];
List<int> addItems = [..items, 5, ...items, 6];
//리스트간의 결합을 할때, 스프레드 연산자를 이용해서 추가가 가능하다.
//bool과의 결합, 한 줄로 되어 있는 if문만 허용한다.
Boolean isRainy = false;
List<int> items = [1,2,3, if(isRainy) 4];
}
//value의 경우, 어떤 값이 올지 모르기 때문에 dynamic을 써준다.
void map(){
Map<String, dynamic> john = {
'name' : 'john',
'age' : 40,
};
String globalVar = 'global';
void main(){
print(globalVar);
}
class Point{
int _x;
int _y;
int? z;
late final int a; //final 사용 가능
Point(this._x, this._y, [this.z]){
a = _x = _y;
}
}
void main(){
Dog dog = Dog();
Cat cat = Cat();
Animal dog1 = Dog();
Animal cat1 = Cat();
dog.walk();
cat.walk();
dog1.walk();
cat1.walk();
}
abstract class Animal{
void walk(){
print('walk');
}
}
class Dog extends Animal{
}
class Cat extends Animal{
@override
void walk(){
print('살금 살금');
}
}
void main(){
SuperHero superHero = SuperHero();
Hero hero = SuperHero();
Moveable moveable = SuperHero();
Drawable drawable= SuperHero();
}
mixin Moveable(){
int i = 0;
void move(){
}
}
mixin Drawable(){
void draw(){
}
}
class Hero{}
class SuperHero extends Hero with Moveable, Drawable{}
void main(){
var box = Box<int>(10);
var box2 = Box<String>('ddd');
}
class Box<T>{
T value;
Box(this.value);
}
void main(){
var delay = Future.delayed(Duration(seconds:3));
delay.then((value) => print('3초 지남'))
.catchError((e) => print(e));
hello().then((value) => print(value));
}
Future<Stirng> hello() async{
await Future.delayed(Duration(second:3));
return 'Hello';
}
void main(){
var stream = Stream.fromIterable([1,2,3]);
stream.listen((event){
print(event);
});
}