dart 에서 함수는 하나의 객체이다.
그래서 함수는 변수에 저장이 가능하며, 다른 함수에 매개변수로 전달 및 함수의 반환값으로 전달 받을 수 있다.
Function
String sayHello(String name){
return 'hello $name';
}
위 함수는 name 이라는 String 타입의 변수를 받아서 String 타입의 값을 리턴한다.
리턴값과 매개변수의 타입을 생략 할 수 도 있다. 하지만 코드 가시성을 높이기 위해 타입을 명시하는 것을 추천한다.
sayHello(name){
return 'hello $name';
}
만약 함수내 표현식이 한줄로 표시 된다면 arrow function 형태로 축약 가능하다.
String sayHello(String name) => 'hello $name';
여기서 => expr 은 { return expr; } 을 의미한다.
Parameters
dart에서는 Positional parameter, Named parameter 의 두가지 형태의 매개변수가 있다.
Positional parameter
Positional parameter 의 경우 함수 호출시 꼭 위치에 맞게 매개변수를 지정해야 한다.
String sayHello (String name, int age) {
return 'hi! my name is $name, my age is $age';
}
print(sayHello('John', 30)); // hi! my name is John, my age is 30
print(sayHello(20, 'Alice')); // hi! my name is 20, my age is Alice
만약 optional 하게 사용하고 싶다면 [] 를 해당 매개변수에 씌어주면 된다.
optional 한 매개변수는 함수 호출시 함께 호출 되어도 되고 안되어도 된다.
다만 호출되지 않았을 시 기본적으로 null 로 세팅된다.
String sayHello (String name, [int? age]){
return age == null ? 'hi! my name is $name' : 'hi! my name is $name my age is $age';
}
print(sayHello('John', 30)); // hi! my name is John my age is 30
print(sayHello('Eric')); // hi! my name is Eric
하지만 null 아닌 다른 default 값으로 세팅하고 싶다면 = 를 통해 default 값을 세팅할 수 있다.
String sayHello (String name, int age, [bool isMale = true]){
String gender = isMale ? 'male' : 'femaile';
return 'hi! my name is $name, my age is $age. my gender is $gender';
}
print(sayHello('Alice', 20, false)); // hi! my name is Alice, my age is 20. my gender is female
print(sayHello('John', 30)); // hi! my name is John, my age is 30. my gender is male
Named parameter
Named parameter 는 함수 선언시 매개변수에 이름을 지정하여,
해당 함수를 호출시 매개변수 이름에 매핑 시켜 함수를 호출한다.
Named parameter 를 사용하는 방법은 매개변수 정의시 {param1, param2 ...} 이런식으로 정의하면 된다.
String sayHello ({String? name}){
return 'hi! my name is $name';
}
print sayHello(name:'John');
Named parameter 는 기본적으로 optional 로 설정해야 한다.
만약 optional 로 설정하지 않았다면 default 값을 지정해 주거나
required 를 사용해서 필수값으로 설정해 주어야 한다.
String sayHello({required String name, int? age, bool isMale = true}) {
String gender = isMale ? 'male' : 'femaile';
if (age == null) {
return 'hi! my name is $name my gender is $gender';
}else{
return 'hi! my name is $name, my age is $age. my gender is $gender';
}
}
print(sayHello(name : 'John'));
// hi! my name is John my gender is male
print(sayHello(name : 'Alice', isMale : false));
//hi! my name is Alice my gender is femaile
print(sayHello(name : 'John', age : 30, isMale : true));
// hi! my name is John, my age is 30. my gender is male
두 방법을 같이 쓰는것도 가능하다.
String sayHello2 (String name, {required int age} ){
return 'hi! my name is $name. my age is $age.';
}
print (sayHello2('John', age: 30)); // hi! my name is John. my age is 30.
'Flutter' 카테고리의 다른 글
[Dart] dart 에서 쓰이는 variables (0) | 2024.09.11 |
---|---|
[Flutter] Flutter 개발, 운영 설정 분리하기 (flavor, build scheme) (0) | 2023.08.31 |