[ Dart ] 06. 함수와 파라미터(feat. QQ Operator)

duck-ach·6일 전
0

Dart

목록 보기
6/7

함수(function)

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;

파라미터(Parameter)

파라미터는 2가지 방법으로 전달할 수 있는데
하나는 position 기반으로 파라미터를 읽는 position parameter, 하나는 직접 name을 파라미터와 함께 지정하여 사용하는 named parameter 이다.
named parameter의 경우 json 통신이랑 매우 비슷하다고 느꼈다.

position Parameter

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

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)

}
profile
자몽 허니 블랙티와 아메리카노 사이 그 어딘가

0개의 댓글