본문 바로가기
📱Flutter/Dart

Dart 3일차 : 함수

by ojui 2025. 8. 30.
반응형

📌Funtion

⭐Defining a Function

// 함수 형식 : return타입 함수명 (파라미터)
void sayHello(String name) {
  print("Hello $name nice to meet you");
}

String sayHello2(String name) {
  return "Hello $name";
}

// fat arrow syntax
String sayHello3(String name) => "Hello $name";

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

void main() {
  // Hello jui
  print(sayHello2('jui'));

  // Hello jui
  print(sayHello3('jui'));
}

 

Fat Arrow Syntax는 코드가 한 줄일때 함수를 간결하게 표현하는 문법이다.

=> 는 return을 의미한다고 생각하면 된다.

 

⭐Named Parameter

String sayHello({String name = 'na', int age = 99, String country = 'wakanda'}) {
  return "${name} / ${age} / ${country}";
}

// required modifier : 반드시 값을 전달해야 한다는 의미
String sayHello2({
  required String name,
  required int age,
  required String country,
}) {
  return "${name} / ${age} / ${country}";
}

void main() {
  // na / 99 / wakanda
  print(sayHello());

  // jui / 10 / Korea
  print(sayHello(name: "jui", age: 10, country: "Korea"));
}

Named Parameter는 파라미터를 이름으로 전달할 수 있는 방식이다.

순서를 기억해서 파라미터를 전달하는 것이 아니라, 파라미터 이름을 지정해서 전달한다.

 

함수 선언 시 중괄호 안에 파라마터를 작성하면된다.

null safety때문에 default 값을 정해주거나 required 키워드를 사용해야한다.

 

⭐Optional Positional Parameter

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

String sayHello2(String name, int age, [String? country]) {
  return 'Hello ${name}, You are ${age} years old from $country';
}

void main() {
  var result = sayHello("jui", 10);
  //Hello jui, You are 10 years old from wakanda
  print(result);
  
  result = sayHello2("jui", 10);
  //Hello jui, You are 10 years old from null
  print(result);
}

매개변수를 선택적으로 받을 수 있는 기능이다.

원하는 파라미터를 대괄호로 감싸서 작성한다.

해당 파라미터에 해당하는 값을 전달하지 않으면 default값을 사용하거나, null이 들어간다.

 

⭐QQ Operator

// 삼항 연산자
String capitalizeName(String? name) =>
    name != null ? name.toUpperCase() : 'ace';

// QQ operator
// 왼쪽 값이 null이 아니면 왼쪽값 return
// 왼쪽 값이 null이면 오른쪽값 return
String capitalizeName2(String? name) => name?.toUpperCase() ?? 'ace';

void main() {
  // JUI
  print(capitalizeName('jui'));
  // ace
  print(capitalizeName(null));

  
  String? name;
  
  // QQ assignment operator : 변수가 null일 때만 값을 할당
  name ??= 'jui';
  name ??= 'another';
  //jui
  print(name);
}

삼항연산자 : ?

QQ operator : ??

QQ assignment operator : ??=

 

⭐Typedef

typedef ListOfInts = List<int>;

List<int> reverseListOfNumbers(List<int> list) {
  var reversed = list.reversed;
  return reversed.toList();
}

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

void main() {
  //[3, 2, 1]
  print(reverseListOfNumbers2([1, 2, 3]));
}

typedef를 이용하여 자료형을 간단하게 작성할 수 있다.

 

typedef Callback = void Function(String message);

void greetUser(String name, Callback callback) {
  callback("Hello, $name!");
}

void main() {
  // Hello, jui!
  greetUser("jui", (msg) => print(msg));
}

강의에서는 안다뤘지만, 이렇게 함수 타입도 선언할 수 있다.

 

즉 typedef는 자료형이나 함수 타입에 별명(alias)를 붙이는 것이다.

반응형

'📱Flutter > Dart' 카테고리의 다른 글

Dart 2일차 : 데이터 타입  (0) 2025.08.29
Dart 1일차 : 컴파일러 & 변수  (0) 2025.08.28