dart의 function

훈나무·2023년 4월 8일
1

dart

목록 보기
3/8
post-thumbnail

https://www.youtube.com/watch?v=fHo9HpBK98k

Functions


Dart에서 함수는 js와 아주 유사합니다.

Dart는 함수도 객체이며 타입이 Function입니다. 이는 함수를 변수에 할당하거나 다른 함수에 인수로 전달할 수 있음을 의미합니다.

// 하나의 표현식만 포함하는 함수의 경우 아래와 같이 단축 구문을 사용할 수 있습니다.
String sayHello(String name) => "Hello ${name} nice to meet you.";

num plus(num a, num b) => a + b;

void main() {
print(sayHello("sugar"));
}

Named Parameters


함수에 key-value 형태로 parameter를 전달하는 방법입니다. (직관적이고 유지보수에 좋음)

  String sayHello(String name, int age) => '안녕하세요 $age살인 $name님 ';
  String namedSayHello({String name, int age}) => '안녕하세요 $age살인 $name님 ';
  print(sayHello('싸피', 10));
  print(namedSayHello(name: '네이버', age: 30));

하지만 namedSayHello함수에서는 에러가 발생합니다. name, age 가 null일 수 있기 때문입니다.
이 때 2가지 방법이 있습니다.
1. default 값을 지정해주기
2. required 를 지정해주기

  String defaultSayHello({String name = '익명', int age = 0}) =>
      '안녕하세요 $age살인 $name님 '; // 1. 디폴트 값
  String requiredSayHello({required String name, required int age}) =>
      '안녕하세요 $age살인 $name님 '; // 2. required

  print(defaultSayHello()); // 안녕하세요 0살인 익명님
  print(requiredSayHello()); // required 이기 때문에 에러 발생

Optional Parameters

다음으로는 parameter들을 required가 아닌 Optional로 사용하는 방법입니다.
먼저 일반함수인 경우입니다.

  String sayHello(String name, int age, [String? country = ""]) {
    return 'Hello ${name}, You are ${age} from the ${country}';
  }

대괄호로 감싸준 후, 위와 같이 사용하면 됩니다. (자주 사용하지 않고 권장하지 않음)

named parameter인 경우는 간단한데

  String requiredSayHello({String? name, required int age}) =>
      '안녕하세요 $age살인 $name님 ';

그냥 ? 만 붙여주면 됩니다.

QQ Operator


(js와 동일)
?? 연산자를 이용하면 왼쪽 값이 null인지 체크해서 null이 아니면 왼쪽 값을 리턴하고 null이면 오른쪽 값을 리턴한다.

String capital(String? name) => name?.toUpperCase() ?? "ANON";

??= 연산자를 이용하면 변수 안에 값이 null일 때를 체크해서 값을 할당해줄 수 있다.

void main() {
String? name;
name ??= "sugar";
name ??= "salt";
print(name); //sugar
name = null;
name ??= "js";
print(name); // js
}
profile
프론트엔드 개발자 입니다

0개의 댓글