기술은 나의 도구

[노마드코더 플러터] Dart Function (함수)

Function(함수) 의 정의

/**
  main 함수 바깥에 함수를 정의해도 상관없음
  name 이라는 문자열 매개변수를 받고 문자열을 리턴
 */
String sayHello(String name) {
  return "Hello $name, nice to meet you";
}

// fat arrow syntax
// 한 줄짜리 함수인 경우 다음과 같이 줄여 쓸 수 있다.
String sayHello(String name) => "Hello $name nice to meet you";
num plus(num a, num b) => a + b;

// void : 아무것도 리턴하지 않음
void main() {
  print(sayHello('moz'));
}

Named Parameters

  • Positional parameter (일반적인 매개변수 사용법)

    // 각 매개변수가 무엇을 의미하는지 알기가 힘들다.  
    String sayHello(String name, int age, String country) {
      return "Hello $name nice to meet you, you are $age years old from $country";
    }
    
    void main() {
      print(sayHello('moz', 19, 'korea');
    }
  • Named Parameter

    // default value 를 설정할 수 있음
    String sayHello({
      String name = 'moz', 
      int age = 12, 
      String country = 'korea'
    }) {
      return "Hello $name nice to meet you, you are $age years old from $country";
    }
    
    // default value 를 지정하고 싶지 않다면? required
    String sayHello({
      required String name, 
      required int age, 
      required String country
    }) {
      return "Hello $name nice to meet you, you are $age years old from $country";
    }
    
    void main() {
      // 매개변수 순서를 기억할 필요가 없음
      print(sayHello(
        age: 12,
        country: 'korea',
        name: 'moz'
      ));
    }

Optional Positional Parameters

// Non-optional parameters can't have a default value.
String sayHello(String name, int age, [String? country = 'korea']) {
  return "Hello $name nice to meet you, you are $age years old from $country";
}

void main() {
  print(sayHello('moz', 12));
}

QQ Operator

// Case 1
String capitalizeName(String? name) {
  if (name != null) {
    return name.toUpperCase();
  }
  return 'TIQ';
}

// Case 2
String capitalizeName(String? name) => name != null ? name.toUpperCase() : 'TIQ';

// Case 3 (QQ)
String capitalizeName(String? name) => name?.toUpperCase() ?? 'TIQ';

void main() {
  print(capitalizeName('moz')); // MOZ
  print(capitalizeName(null)); // TIQ
}

// QQ assigned operator
void main() {
  String? name;
  name ??= 'moz'; // name 이 null 이면 moz 할당
  print(name); // moz
}

Typedef

// 자료형에 alias 를 붙일 수 있다.
typedef ListOfInts = List<int>;
typedef UserInfo = Map<String, String>;

ListOfInts reverseListOfNumbers(ListOfInts list) {
  var reversed = list.reversed; // iterable type
  return reversed.toList();
}

String sayHi(UserInfo userInfo) {
  return "Hi ${userInfo['name']}";
}

void main() {
  print(reverseListOfNumbers([1, 2, 3])); // [3, 2, 1]
  print(sayHi({"name": "moz"})); // Hi moz
}
  • #노마드코더
  • #플러터
  • #Dart