본문 바로가기
Dart

[Dart] 기본문법 Functions

by 루에 2023. 1. 10.
반응형

함수 기본 선언 방식

// 일반적인 함수 선언
String sayHello(String name) {
  return "Hello, $name nice to meet you!";  
}

// 바로 리턴할 경우 람다식으로 축약 가능 fat arrow syntax
String sayHello2(String name) => "Hello, $name nice to meet you!";

// 수식 함수에 fat arrow syntax 적용
num plus(num a, num b) => a + b;

void main() {
  print(sayHello2('nico'));
  print(plus(2,3));
}

 

Named Parameters

named argument로 파라미터에 이름을 지정({}로 감싸고 오브젝트를 넘기듯이 함수 호출)

default argument로 기본값 지정 가능

required prefix로 반드시 넘겨야하는 파라미터 지정 가능

// 일반적인 함수 선언
String sayHello(String name, int age, String country) {
  return "Hello, $name, you are $age, and you com from $country";
}
// named parameters 및 default parameters 적용
String sayHello2({
  String name = 'babo', 
  int age = 10, 
  String country = '강릉'}) {
  return "Hello, $name, you are $age, and you com from $country";
}
// named parameters 및 required 
String sayHello3({
  required String name, 
  required int age, 
  required String country}) {
  return "Hello, $name, you are $age, and you com from $country";
}
void main() {
  print(sayHello('nico', 29, '서울'));
  print(sayHello2(
    age: 12,
    country: 'cuba',
    name: 'nannom',
  ));
  print(sayHello3(
    age: 12,
    country: 'cuba2',
    name: 'nannom2',
  ));
}

 

Optional Positional Parameters

Optional(nullable) 파라미터를 받도록 하는 것.

파라미터를 옵셔널 문자(= ?)를 붙이고 파라미터 앞뒤로 []로 감싼다.

// 일반적인 함수 선언
String sayHello(
  String name,
  int age,
  [String? country]	// optional augement
) => "Hello, $name, you are $age, and you com from $country";

void main() {
  print(sayHello('nico', 29, '서울'));
  print(sayHello('nico2', 19));	// Hello, nico2, you are 19, and you com from null
}

 

QQ Operator

Question Question Operator의 준말.

left ?? right 로, left가 null이 아니면 left를, null이면 right를 리턴한다.

 

번외로 QQ equals문법도 존재.

Optional한 변수에 값을 할당할 때

optionalVariable ??= value;

라고 사용하면 optionalVariable이 null일 때만 value가 optionalValue에 할당된다.

String capitalizeName(
  String? name
) => (name != null) ? name : "defaultName";

// QQ Operator
String capitalizeName2(
  String? name
) => name ?? "defaultName";


void main() {
  capitalizeName('babo');
  
  // QQ equals Operator
  String? name;
  name ??= 'nico';
  name ??= 'another'; // name이 null이 아니기 때문에 실행되지 않는다.
  print(name);
}

 

typedef

임의의 자료형에 이름을 부여해 사용할 수 있다.

// 타입별명 부여
typedef ListOfInts = List<int>;

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

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

void main() {
  print(reverseListOfNumbers([1,2,3]));
  print(reverseListOfNumbers2([1,2,3,4,5,6]));
}

 

반응형

댓글