본문 바로가기
기초다지기/Flutter&Dart

Dart functions

by 김빵그 2023. 4. 5.

1. 함수 정의

void sayHello(parameter) {
  print("Hello");
}
///
void sayHello(String name) {
  print("Hello $name nice to meet u~");
}
  • parameter안에 타입과 변수 명을 넣어서 print 한다
  • void는 이 함수가 아무것도 return 하지 않는다는 의미
String sayHello(String name) {
  return "Hello $name nice to meet u~";
}
///// 한줄자리 코드 위와 아래의 코드는 같다

String sayHello(String name) => "Hello $name nice to meet u~";

////출력 

void main() {
  print(sayHello('songyi'));
}
  • 출력대신 return 하고 싶다면 다음과 같이 작성하면 된다
  • 한줄짜리 코드는 fat arrow syntax사용하는것이 코드줄이기에 좋다 (=>)

 


2. 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(
    age: 12,
    country: 'jeonju',
    name: "songyi",
  ));
}
  • 많은 argument가 있을 시 name parameters를 활용하는게 좋다 단순하게 순서를 기억하는 대신 이름 : 값을 넣어주어 대입한다
  • name시 중괄호{} 로 쌓아주면 끝

 

Null 값? 

1. default value 

String sayHello({
  String name = "songyi",
  int age = 100,
  String country = "daejeon",
}) {
  return "hello $name, you are $age, and you come from $country";
}

void main() {
  print(sayHello(
    age: 12,
  ));
  //hello songyi, you are 12, and you come from daejeon
}
  • named argument에 default value를 정하여 null 값을 받게 되더라도 기본 값을 return 한다

2. required

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: 'songyi',
    country: 'jeonju',
    age: 12,
  ));
}
  • required modifier를 이용해서 필수 값으로 만들어 준다
  • required를 작성하게되면 sayhello에서 무조건 name, age, country를 가져야 되는 것을 알게된다
  • 하나라도 없을시 실해하더라도 컴파일 되지 않는다

 


3. Positional Parameters

String sayHello(String name, int age, [String? country = "jeonju"]) =>
    'Hello $name, you are $age years old, from $country';

void main() {
  sayHello(
    'soneyi',
    12,
  );
}
  • country가 required하지 않게 하려면 대괄호 안?과 default 값을 넣어주면 된다 (필수가 아닌 값)
  • [String? country = "jeonju"] 
  • ? = null이 될 수도 있다고 표시

 

 


4. QQ Operator 

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

void main() {
  capitalizeName("songyi");
  capitalizeName(null);
}
  • 사용자가 null값도 보낼수 있게 한다면, 
  • parameter 타입 뒤에 ?물음표를 넣어준다 String? name name값이 null일수도 아닐수도 있다는 말이다
String capitalizeName(String? name) =>
    name != null ? name.toUpperCase() : "haha";
  • 짧게 => 를 사용하여 만들수도 있다
String capitalizeName(String? name) => name?.toUpperCase() ?? "haha";

//left ?? right
  • 더 짧게 ?? QQ를 사용하여 만들 수 있다
  • ??가 체크하는데 left가 null이면 right를, left가 null이 아니라면 그냥 left를 return 한다
void main() {
  String? name;
  name ??= "songyi";
  name ??= "Lee";
  print(name); //songyi
}
  • ??= 
  • name이 null일수도 있는 스트링 하나 만든 후, ??= name값이 null이라면 우측 값을 할당하면 된다

 


5. Typedef

 

  • 자료형이 헷갈릴 때 도움이 될 alias를 만드는 방법이다
typedef ListOfInts = List<int>;

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

void main() {
  print(reverseListOfNumbers([1, 2, 3])); //3,2,1
}
  • 숫자로 된 List를 가지고 List를 반대로 뒤집어 return 하는 함수를 만들 때 
  • typedef를 사용하여 이름을 부여?할 수도 있다
  • 만약 구조화된 data 형태를 지정하고 싶다면, class를 만들어줘야 한다!
typedef UserInfo = Map<String, String>;

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

void main() {
  print(sayHi({"hahaha": "songyi"}));
}

 

'기초다지기 > Flutter&Dart' 카테고리의 다른 글

Dart Class  (1) 2023.04.06
Flutter / Dart 빌드  (0) 2023.04.05
Dart Data types  (0) 2023.04.04
Dart를 알아보자  (0) 2023.04.03
vscode에서 dart 자동 줄정렬이 안 될 때  (1) 2023.03.29