공부하면서 가볍게 메모하는 글
프로그램의 시작이 main 함수에서 이뤄짐
C나 C++이 생각난다.
void main(List<String> arguments) {
print(arguments);
}
Dart는 타입 언어로 다양한 Built in type들을 지원하고, 타입체크 기능과 타입추론 등 타입 사용을 위한 각종 feature를 제공한다.
그와 동시에 타입에서 자유로운 Variable도 제공하고 있는데 할당시에 타입추론을 통해 자동으로 타입이 결정된다.
if
else-if
else
, for...in
for
while
, switch
break
continue
등 제어 로직은 자바스크립트 문법과 유사하게 제공된다.
파라미터와 반환값의 타입을 지정한 형태의 함수로도 사용가능하고, 자바스크립트와 유사 문법의 Arrow Function도 사용 가능하다.
int fibonacci(int n) {
if (n == 0 || n == 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
...
(name) => name.contains('turn')
함수의 파라미터엔 세 종류가 있는데 Required positional parameters
Named Parameters
와 Optional positional parameters
이다
이 중 required positional parameters
가 일반적으로 사용하는 함수 파라미터와 같은 개념이고, 그 뒤에 Named Parameters
나 Optional positional parameters
가 올 수 있다. 둘 중 어떤 것을 붙여써도 상관없지만 둘 다 붙여쓸 수는 없다.
String say(string lastname);
Named Parameter는 {}
로 감싸서 정의 가능하다.
기본적으로 모든 Named parameter가 옵셔널하기 때문에 필수 인자로 하고싶으면 required
예약어를 사용해야한다.
String say({required string firstname});
dart에선 인자에 ?를 붙여 nullable을 표시할 수 있는데, required와 ?의 동시 사용도 가능하다.
// null 값으로 넣을 순 있지만 꼭 입력은 해줘야하는 middlename
String say({required string? middlename});
옵셔널 파라미터는 []
로 감싸서 사용할 수 있다.
옵셔널 파라미터의 값에 defaultValue를 지정하지 않을 경우 필수적으로 nullable ?
선언해줘야 한다.
String say(String lastname, String firstname, [String? suffix])
자바스크립트와 같이 하위에서 상위의 변수를 참조할 수 있는 스코프를 제공한다.
자바스크립트와 유사하게 클로저 선언도 가능하다.
Function이나 Method 사용 시 인자를 직접 넣어 호출하지 않더라도 상위 환경에서 자동으로 떼어와 삽입해주는 Tear-off 기능이 제공된다.
// bad
charCodes.forEach((code) {
print(code);
});
// good
charCodes.forEach(print);
Dart에선 연속된 값(배열같은)의 생성을 위해 두 종류의 generator를 제공한다.
Synchronous generator: Iterable 반환
Iterable<int> countdown(int start) sync* {
for (var i = start; i > 0; i--) {
yield i;
}
}
void main() {
for (var num in countdown(5)) {
print(num);
}
}
Asynchronous generator: Stream 반환
Stream<int> asyncCountdown(int start) async* {
for (var i = start; i > 0; i--) {
await Future.delayed(Duration(seconds: 1)); // 1초 대기
yield i;
}
}
void main() async {
await for (var num in asyncCountdown(5)) {
print(num);
}
}
바깥에서 구현된 함수를 사용할 때 선언용으로 사용하는 예약어
external void someFunc(int i);
주석 사용법은 자바스크립트와 완전 동일하다.