Language/Dart

3. Function

ABCD 2023. 4. 5.

3-0) Defining a Function

void sayHello(String name){
  print("Hello ${name}, nice to meet you!");
}
//위와 같읕 코드
void sayHello(String name) => print("Hello ${name}, nice to meet you!");


void main() {
  sayHello("nico");
}


3-1) Named Parameters

  • Named Parameters를 사용하지 않았을 때
String sayHello(String name, int age, String country){
  return "Hello, ${name}, you are ${age}, and you come from ${country}";
}

void main() {
  print(sayHello("nico", 19, "cuba"));
}

  • Named Parameters를 사용할 때
  • default value를 지정해주어야 함
    • default를 잡아주지 않으면 null safety로 인해 에러발생
    • 이를 해결하기 위해서는 parameter 앞에 required 예약어를 사용해야함
      • 이 경우 반드시 메소드 parameter에 변수를 넣어 주어야 함
      • 메소드 호출 시 parameter를 순서에 맞게 작성 할 필요가 없음
      • 모든 parameter를 전부 써주어야 함
//default value를 잡아 줄 시 {}중괄호를 넣어 주어야 함
String sayHello({
	String name = 'anon',
	int age = 99,
	String country = 'wakanda',
}) {
	return "Hello, ${name}, you are ${age}, and you come from ${country}";
}

//해당 메서드 처럼 default value를 잡아주면 매개변수를 넣지 않아도 메소드 실행됨
void main(){
	//호출시에는 {}중괄호 불필요
	sayHello();
}
//default value를 잡아 줄 시 {}중괄호를 넣어 주어야 함
String sayHello({
    required String name,
    required int age,
    required String country}){
  return "Hello, ${name}, you are ${age}, and you come from ${country}";
}

void main() {
	//호출시에는 {}중괄호 불필요
  print(sayHello(
    name : "nico",
    age : 19,
    country :"cuba"
  ));
}


3-2) Optional Positional Parameters

  • 메소드의 parameter 중 생략 가능하게 하고 싶을 시 해당 parameter를 [ ]로 감싸면 가능
String sayHello(String name, int age, [String? country = "cuba"]){
  return "Hello, ${name}, you are ${age}, and you come from ${country}";
}

void main() {
  print(sayHello("nico", 19));
}


3-3) QQ Operator

//좌항이 null이 아니면 그대로 좌항을 reutrn
//좌항이 null이면 우항을 return
left ?? right

ex) 예시

String capitalizeName(String? name) {
  if(name != null){
    return name.toUpperCase();
  }
  return 'ANON';
}

//간단하게 변환
String capitalizeName(String? name) => name != null ? name.toUpperCase() : 'ANON';

//더 간단하게 변환
String capitalizeName(String? name) => name?.toUpperCase() ?? 'ANON';

//좌항이 null이 아니면 그대로 좌항을 사용
//좌항이 null이면 우항을 대입
void main() {
  String? name;
  name ??= 'nico';
  name = null;
  name ??= 'another';
  print(name);
}


3-4) TypeDef

  • alias(별칭, 별명)를 사용할 수 있게 해줌
    • 마치 DB에서 AS와 같은 기능

ex) List를 사용한 예시

typedef ListOfInts = List<int>;

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

//해당 코드는 다음과 동일 함
ListOfInts reverseListOfNumbers(ListOfInts list){
	var reversed = list.reversed;
	return reversed.toList();

ex) Map을 사용한 예시

typedef UserInfo = Map<String, String>;

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

void main(){
	sayHi({"name" : 'nico'});
}

Uploaded by N2T

728x90
반응형

'Language > Dart' 카테고리의 다른 글

4. Classes  (0) 2023.04.05
2. Data Types  (0) 2023.04.05
1. Variables  (0) 2023.04.05
0. Why Dart  (0) 2023.04.05

댓글

💲 추천 글