함수 선언
void greeting(String name) {
print('Hello my name is $name!');
// 1
String greetingString(String name) {
return 'Hello my name is $name';
}
// 2
String greetingString(String name) => "Hello my name is $name";
}
void main() {
greeting('gwanson');
print(greetingString('gwanson'));
}
리턴값이 없는 함수는 void
로 선언을 하고, 리턴값이 존재하는 함수는 해당하는 타입으로 선언합니다.(예: String
,int
)
named parameter
String greeting({
required String name,
int age = 99,
String? country,
}) {
return 'Hello $name, you are $age, and you come from $country';
}
void main() {
print(greeting(
age: 26,
name: 'gwanson',
));
}
// 출력
// Hello gwanson, you are 26, and you come from null
Dart의 함수 파라미터는 named argument를 지원합니다.
named parameter를 선언하는 방법은 아주 간단합니다. 파라미터에 {}
를 씌워주는 것만으로 함수를 호출할 때 파라미터의 순서와 관계없이 호출할 수 있게 됩니다.
위의 greeting
함수는 총 3가지의 방법으로 파라미터를 선언한 것을 볼 수 있습니다.
required
required
는 해당 파라미터는 함수가 동작할 때 필수로 존재해야하는 것을 뜻하는 키워드입니다.- default value
int age
를 보면 기본 값이 99로 선언되어 있습니다. 이는 사용자가 age에 아무런 값을 할당하지 않으면 기본적으로 99란 값이 들어가는 것을 의미합니다. null safety
파라미터 자료형에?
를 붙여서 해당 값이 입력되지 않으면 null값으로 처리될 수 있게 해줍니다.
Optional Positional Parameters
함수의 Positional Parameter
는 순서에 맞춰서 입력해야합니다. named parameter를 사용하지 않는 함수의 파라미터에는 Optional Positional Parameter를 사용하여 처리할 수 있습니다.
String greeting(String name, int age, [String? country = 'korea']) => return 'Hello, my name is $name, I'm $age years old from $country';
void main() {
print(greeting('gwanson', 26));
}
// 출력
// Hello, my name is gwanson, I'm 26 years old from korea
위의 코드처럼 main에서 greeting을 호출했을 때, country값을 넣지 않았음에도 korea가 출력되는 것을 볼 수 있습니다.
함수의 파라미터에 []
를 감싸주고 ?
를 자료형에 붙여주면 옵셔널 파라미터가 됩니다.
QQ Operator
??
??
오퍼레이터는 swift의 오퍼레이터와 유사한 역할을 합니다.
String capitalizeName(String? name) => name?.toUpperCase() ?? 'ANON';
void main() {
capitalizeName('gwanson');
capitalizeName(null);
}
// 출력
// GWANSON
// ANON
left ?? right 라고 예시를 들었을 때, left가 true면 left의 값을 return하고, false면 right의 값을 return 합니다.
??=
??=
오퍼레이터는 해당 값이 null
이면 값을 할당해주는 오퍼레이터입니다.
String? name;
name ??= 'gwanson';
print(name);
// 출력
// gwanson
Typedef
Dart의 Typedef는 swift의 typealias와 유사한 기능을 합니다.
어떠한 자료형의 이름을 직접 선언해줄 수 있습니다.