본문 바로가기
Flutter

[Dart] function, Positional parameter, Named parameter

by 동동하다 2024. 9. 13.
반응형

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.
반응형