[Flutter] Dart - 3. Function

2024. 8. 25. 00:41Study

1. Defining a Function

void sayHello(String name) {
  // void는 아무것도 return하지 않는다는 뜻
  print("Hello, $name");
}

// 리턴하는 경우에는 아래와 같이 작성해야함
String sayHello1(String name) {
  // void는 아무것도 return하지 않는다는 뜻
  return "Hello, $name";
}

// 위와 같이 return하는 동일한 함수
String sayHello2(String name) => "Hello, $name";

void main() {
  print(sayHello1('miri')); // Hello, miri
  print(sayHello2('miri')); // Hello, miri
}

2. Named Parameters

  • 해당 방법을 더 선호
// function의 반환형
// 해당 함수는 String을 반환해야 한다는 뜻
String sayHello(String name, int age, String country) {
  return "Hello, $name, you are $age, and you come $country";
}

//named argument
String sayHello1(
    // 1. default value 설정
    {String name = 'anon',
    int age = 0,
    String country = 'korea'}) {
  return "Hello, $name, you are $age, and you come $country";
}

String sayHello2(
    // 2. required
    {required String name,
    required int age,
    required String country}) {
  // default value 설정
  return "Hello, $name, you are $age, and you come $country";
}

void main() {
  print(sayHello('miri', 30, 'jinju'));

  print(sayHello1(name: 'miri', age: 30, country: 'jinju'));
  print(sayHello2(name: 'miri', age: 30, country: 'jinju'));
}

3. Optional Positional Parameters

  • 마지막 인자가 필수가 아니라고 알려주는 표시 + default value 지정
  • 잘 사용하지는 않음
String sayHello(String name, int age, [String? country = 'korea']) =>
    "Hello, $name, you are $age, and you come $country";

void main() {
  var res = sayHello('miri', 30);
  print(res);
}

4. QQ Operator

String capitalizeName(String name) => name.toUpperCase();

void main() {
  print(capitalizeName('miri')); // MIRI
}
  • name에 null 값을 입력하고 싶은 경우
String capitalizeName(String? name) {
  if (name != null) {
    return name.toUpperCase();
  }
  return "ANON";
}

// fat arrow 방식을 사용하면 아래와 같이 코드를 줄일 수 있음
String capitalizeName(String? name) => name != null ? name.toUpperCase() : 'ANON';

// 더 간단하게 작성하면?
String capitalizeName(String? name) => name?.toUpperCase() ?? 'ANON';
// left ?? right → 좌항이 null이면 우항을 리턴함

void main() {
  print(capitalizeName(null)); // ANON
}

5. Typedef

  • 자료형이 헷갈릴 때 도움이 될 alias을 만드는 방법
// typedef는 여러개 사용 가능
typedef ListOfInts = List<int>;

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

typedef UserInfo = Map<String, String>;

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

void main() {
  print(reverseListOfNumbers([1, 2, 3])); // [3, 2, 1]
  print(sayHi({'name': 'miri'})); // Hi, miri
  print(sayHi({'dadadadsa': 'miri'})); // Hi, null
}
  • 구조화된 data 형태를 지정하고 싶다면 class를 만들어야함

'Study' 카테고리의 다른 글

Flutter에서 위젯(Widget)이란?  (0) 2024.08.29
Flutter vs React Native, 어떤 걸 선택할까? 🤔  (0) 2024.08.26
[Flutter] Dart - 4. Class  (0) 2024.08.25
[Flutter] Dart - 2. Data Type  (0) 2024.08.25
[Flutter] Dart - 1. Variables  (0) 2024.08.25