flutter 학습할 때 아래 4가지 변수를 사용한다고 했다.
아래 그림은 출력결과이다.
void main() {
int n1 = 1;
double d1 = 10.1;
bool b1 = true;
String s1 = "hong";
print("정수 : $n1");
print("실수 : $d1");
print("불련 : $b1");
print("문자열 : $s1");
}
자바스크립트와 같이 타입추론을 지원한다.
void main() {
var n = 1;
var d = 10.1;
var b = true;
var s = "hong";
print(n);
print(d);
print(b);
print(s);
print(n.runtimeType);
n = 2;
print(n);
n = 10.2;
}
당연하게도 var가 int타입을 가지게 된 후에 double값을 넣으면 안된다.
모든 타입을 받을 수 있는 무적의 타입이다.
void main() {
dynamic n1 = 1;
print(n1);
print(n1.runtimeType);
n1 = 10.5;
print(n1);
print(n1.runtimeType);
}
자바랑 똑같다!!
근데 dart에는 몫 연산자가 있다. 자바에도있나? 써본적이 없어선지 잘 모르겠다. 어쨋든 적어보자면
print(5~/2);
이거다. ~/ 이게 몫 연산자이다. 실행하면 아래 그림과 같은 결과가 나온다.
이것도 자바랑 똑같다. 근데 못보던게 있는데 그게 바로 null연산자이다.
String username = null;
print(username ?? "홍길동");
쓰면 홍길동이 나와야 되는데 에러가 터진다. 패치가 되었는지 String에는 null이 들어갈 수 없다고 한다.
자바랑 같다
다만 public, private가 안붙네?
void run(){
print("run");
}
void study(){
print("study");
}
// 하루 루틴을 결정해주는 함수
void routine(Function start){ // Function 함수타입을 담을 수 있다.
//study();
start();
}
void main() {
routine(run);
}
달리기 함수와 공부 함수가 있다. routine 함수에 study();를 넣는 식으로 구현해 놓으면 매번 다른 함수를 넣을때마다 함수 내부를 수정해야된다. 이렇게 하지 않기 위해서 Function이라는 객체를 쓰는데 이는 함수타입을 담을 수 있는 객체이다.
그렇다면 이렇게 하는게 최선일까? 만약 식사라는 함수도 있고 잠 더 자기 함수 등등 1000개의 함수가 필요하다면 1000개의 함수를 모두 다 작성해야 하는가? 아무래도 좀 끔찍한 상황인거 같다. 이것을 타개하기 위해 익명함수를 쓴다.
void main() {
routine((){
print("농구");
});
}
이름이 없는 함수라서 익명 함수이다. 안에 아무거나 넣어도 된다.
void routine(Function start){ // Function 함수타입을 담을 수 있다.
String result = start();
print(result);
}
void main() {
routine((){
print("캬캬캬캬");
return "짜파게티 먹기";
});
routine(()=>"신라면 먹기"); // 람다식
}
람다식 안에는 두개를 쓸 수 없다. 따라서 두 개를 써야할 경우에는 익명함수를 써야만 한다. 정리하자면 람다식이나 익명함수는 입력값이 뭐가 될지 모르겠을때 클라이언트가 결정하도록 하는 것이다.