Dart 언어의 함수는 만드는 방법이 간단하다.
반환타입 메소드이름(파라미터) {
동작
}
위와 같은 형식으로 만들어주면 된다.
bool haveMoney(int money) {
return money != null;
}
// void == 반환 값 X
void sayHello(String name) {
print("Hello $name nice to meet you!");
}
또는 짧고 간단한 함수의 경우 Syntax Return 을 사용하여 간단하게 =>
를 활용하여 한줄로도 표현할 수 있다.
// Syntax return 사용
String sayHelloSyntaxReturn(String name) => "Hello $name nice to meet you!";
num plus(num a, num b) => a + b;
파라미터는 2가지 방법으로 전달할 수 있는데
하나는 position 기반으로 파라미터를 읽는 position parameter
, 하나는 직접 name을 파라미터와 함께 지정하여 사용하는 named parameter
이다.
named parameter
의 경우 json 통신이랑 매우 비슷하다고 느꼈다.
position Parameter의 경우 Java처럼 파라미터에 어떤값이 들어올지, 지정하고 호출할 때도 파라미터를 그냥 그 자리에 맞춰 호출하면 된다.
void sayHello(String name, String greeting) {
print("Hello $name $greeting");
}
int pow(int n) => n * n;
main() {
sayHello('duck', 'nice to meet you!');
pow(3);
}
또는 특정 파라미터만 Optional 하게 지정할 수도 있다.
nullable variables 를 이용한 방법이다.
String sayHello(String name, int age, [String? country = 'korea']) => 'Hello $name, you are $age years old from $country';
main() {
print(sayHello('duck', 25));
// Hello duck, you are 25 years old from korea
}
또 다른 비슷한 방법으로 연산자 QQ Operator ??=
를 활용하는 방법이 있다.
만약 null 값일 수도 있는 파라미터를 넣는다고 가정했을 때 아래와 같이 if문을 넣어 null인지 체크한 후 함수를 호출해야 오류가 안난다.(함수 호출을 하는 곳에서 오류)
// 변경전
String capitalizeName(String? name) {
if(name != null) {
return name.toUpperCase();
}
return 'ANON';
}
// 변경후
String capitalizeName2(String? name) => name != null ? name.toUpperCase() : 'ANON';
main() {
String? name;
name ??= 'heera';
capitalizeName2(name); // HEERA
}
named parameter는 key와 value를 호출할 때 명시해준다.
하지만 이 named parameter 방법의 경우 만약 파라미터가 3개라면 3개의 파라미터를 다 받아야하는데 누락이 될 수 있는 문제가 있다.
그래서 default 값을 명시해준다.
호출을 할 때 해당 파라미터는 전달하지 않고 호출했다면 default 값이 할당된다.
String namedParameter1({String name = 'anon', int age = 0, String country = 'hello world'}) {
return "Hello $name, you are $age, and you come from $country";
}
main() {
print(namedParameter1(
name: 'duck',
age: 25,
));
// Hello duck, you are 25, and you come from hello world
print(namedParameter1());
// Hello anon, you are 0, and you come from hello world
}
만약 모든 파라미터가 꼭 들어와야한다면 required
선언을 해주면 된다.
String namedParameter2({
required String name,
required int age,
required String country}) {
return "Hello $name, you are $age, and you come from $country";
}
main() {
print(namedParameter2(
name: 'duck',
age: 25,
country: 'japan',
));
// Hello duck, you are 25, and you come from japan![](https://velog.velcdn.com/images/duck-ach/post/a358600d-595e-4226-b945-caaa29080a64/image.png)
}