1. Defining Fuction! (fat arrow syntax)
void hihi(String name) {
print("hihi my name is $name");
}
String hihi2(String name) => "hihi my name is $name 22";
void main() {
hihi("hyun!");
print(hihi2("hyun22!"));
}
C와 유사한 형식의 함수 꼴을 사용한다. return 타입을 함수명 앞에서 정의한다. 단순히 return만 하는 함수인 경우 위와 같이 => 을 사용해 한줄로 정의할 수 있다.
2. named parameter!
String hihi2({String? name, required int age, String country = "korea"}) {
return "hihi my name is $name and $age year's old and froem $country";
}
void main() {
print(hihi2(
age: 25,
name: "gyu",
country: "korea",
));
}
인자가 여러개 있는 함수를 호출할때 인자의 순서에 관계없이 인자의 이름을 이용해 값을 넘기는 방법이다. 이 방법의 장점은 방금 말했듯이 순서가 무관하다.
하지만 사용에 조심해야 하는 점이 있다. 우선 인자들을 {}으로 묶어줘야 한다. 그리고 named parameter의 값을 사용자가 넘겨주지 않을 수 있기 때문에(null을 참조 할 수 있기 때문에) 몇가지 방법을 통해 이 부분을 해결해줘야 한다.
- ?를 사용해 해당 type이 null일 수도 있음을 알리기
- required를 사용해 만약 사용자가 인자를 넘기지 않으면 오류를 뱉게 만들기
- default value를 사용해 만약 사용자가 인자를 넘기지 않으면 해당 값을 사용하게 만들기
이 세가지 방법을 사용해 null을 참조하는 문제를 해결한다.
3. optional Positional Parameters!
String hihi3(String name, int age, [String? country = "korea"]) {
return "hihi my name is $name and $age year's old and froem $country";
}
void main() {
print(hihi3("hung", 12));
}
특정 값을 넘겨주고 싶지 않을때 사용할 수 있는 방법이다. 해당 방법을 사용해주기 위해선 넘겨주고 싶지 않은 인자에 []와 default value를 넣어주면 된다. 그렇다고 값을 넘겨주면 안되는건 아니다. hihi3("hung",12,"japan");으로 함수를 호출하면 default value인 korea가 아닌 japan으로 출력 되는 것을 확인 할 수있다.
4. QQ Operator
String toUpper(String name) {
var newName = name.toUpperCase();
return newName;
}
String toUpper1(String? name) {
if (name != null) {
var newName = name.toUpperCase();
return newName;
}
return 'ANON';
}
String toUpper2(String? name) => name != null ? name.toUpperCase() : 'ANON';
String toUpper3(String? name) => name?.toUpperCase() ?? 'ANON';
void main() {
print(toUpper("g"));
print(toUpper1("g1"));
print(toUpper2("g2"));
print(toUpper3(null));
String? name;
name ??= 'hyun';
print(name);
}
만약 함수의 인자로 null값을 넘기고 싶은 경우 위와 같이 여러 방법으로 문제를 해결할 수 있다. if를 이용한 처리, 삼항연산자와 비슷한 방법으로의 처리 그리고 QQ(??)를 이용한 처리가 있다.
QQ(??)는 단순하게 ?? 기준 좌항(name?.toUpperCase())의 값이 null 이면 우항('Anon')을 return 하는 기호임.
그리고 메인 함수 밑에 ??= 기호가 존재하는데 얘는 "만약 해당 값이 null 이면 이 값으로 초기화 해라"라는 의미임.
5. Type def!
typedef ListOfInts = List<int>;
ListOfInts reverseListOfNumbers(ListOfInts list) {
var reversed = list.reversed;
print("Data type of reversed: ${reversed.runtimeType}");
return reversed.toList();
}
void main() {
print(reverseListOfNumbers([1, 2, 3]));
}
typedef를 통해 특정 data type의 alias를 만들 수 있다! 위와 같이 사용할 수 있음!
'IT 일기 > Flutter!' 카테고리의 다른 글
Dart를 빠르게 알아보자 - class! #2 (0) | 2023.04.18 |
---|---|
Dart를 빠르게 알아보자 - class! #1 (0) | 2023.04.18 |
Dart를 빠르게 알아보자 - Data Type! (0) | 2023.04.16 |
Dart를 빠르게 알아보자 - 변수 (0) | 2023.04.16 |