본문 바로가기

Dart 함수 (function) 알아보기 본문

Dart

Dart 함수 (function) 알아보기

개발자로 거듭나기 2023. 4. 28. 17:29
반응형

04. dart function

01. 함수 작성법

  • 아래 sayHello를 예로 든다면,
  • void : return 타입. 아무것도 반환하지 않으므로 void 형
  • sayHello : 함수의 이름
  • String name : 매개변수로 String 타입의 변수 name 사용
void sayHello(String name) {
  print("Hello $name");
}

// String : 함수의 반환값이 String 형태
// => : 즉시 return 시 fat arrow 사용하여 표현 가능 (return 문 한줄일 때 괄호와 return 키워드가 => 변환)
String directReturn(String name) => "Hello $name";

02. 파라미터

  • positional arguments : 함수 호출시 정해진 순서로 파라미터를 넣어서 호출 해야함
String positional(String name, int age, String country) {
  return "Hello $name, you are $age, you come from $country";
}

void main() {
    print(positional("tom", 12, "USA")); // Hello tom, you are 12, you come from USA
}
  • 그러나 인자가 많아질수록 매개변수 자리가 헷갈리고 무엇을 의미하는지 모호해지게 된다.
  • named arguments : 파라미터 순서를 기억하는 대신 항목을 지정 해서 호출
  • {} 로 파라미터 부분을 감싸준다.
  • null safety 처리를 해줘야 하는데 3가지 방법이 있다.
// 디폴트 값 지정
String named01(
    {String name = 'nick', int? age = 12, String country = 'KOREA'}) {
  return "Hello $name, you are $age, you come from $country";
}

// required 필드로 만들기
String named02(
    {required String name, required int age, required String country}) {
  return "Hello $name, you are $age, you come from $country";
}

// null이 할당될 수 있게 하기
String named03({String? name, int? age, String? country}) {
  return "Hello $name, you are $age, you come from $country";
}
  • 호출부분
print(named01(
    age: 12,
    name: "mary",
    country: "UK",
  )); // Hello mary, you are 12, you come from UK

03. optional positional arguments

  • 매개변수를 []로 감싸서 옵셔널로 지정할 수 있고, default값도 줄 수 있다.
  • [] 내부의 변수들은 optional arguments 이다.
String OptionalPositional(
  String name,
  int age, [
  String? country = 'KOREA',
]) {
  return "Hello $name, you are $age, you come from $country";
}

void main() {
    print(OptionalPositional(
      "brown", 12)); // Hello brown, you are 12, you come from KOREA
}

04. QQ Operator

  • 다음과 같은 함수가 있다.
  • null safety 때문에 기본적으로 name에는 null이 할당될 수 없다.
String capitalizeName(String name) => name.toUpperCase();
  • 만약 name 값에 null이 허용될 수 있도록 하려면 어떻게 해야할까?
  • QQ Operator를 사용하면 가능하다.
String capitalizeName(String? name) => name?.toUpperCase() ?? 'name is null';
  • ??(QQ) 란 left ?? right 일때, left가 null이면 right값, 아니면 left 값을 사용하겠다 라는 의미이다.

05. QQ equals

  • ??= 좌항이 null일경우 우항에 있는 값을 할당
String? canBeNull;
canBeNull ??= "defaultName";

06. typedef

  • 긴 타입이거나 여러번 나오는 타입의 이름을 정해서 사용할 수 있다.
  • 정의한 타입이 그대로 대입된다고 간주
typedef mytype = List<int>; // 타입정의

mytype reversedList(mytype list) {
  var reversed = list.reversed;
  return reversed.toList();
}
반응형

'Dart' 카테고리의 다른 글

Dart class - named constructor  (0) 2023.04.28
Dart class - basic  (0) 2023.04.28
Dart 자료형 (Data Type)  (0) 2023.04.28
Dart 변수 알아보기 ( variables )  (0) 2023.04.28
Dart 시작하기 - Hello World  (0) 2023.04.28
Comments