본문 바로가기

Flutter/Dart

Dart- 함수

함수 선언

- positional parameter

함수의 파라미터 위치에 알맞게 값을 순서대로 넣는 것이다.

- named parameter

함수 사용시 들어갈 파라미터값을 명시하는 방법은 함수 선언시 파라미터들에 { }를 써서 Map처럼 선언하는 것이다.
또한 아무런 조치 없이 { }로 감싼 경우 들어가는 파라미터들은 null safety에 의해서 오류를 반환한다.

String sayHello({
  String name,   // null safety에 의한 에러발생
  int age,
  String country,
}) {
  return "hello my name is $name, my age is $age and i lived in $country";
}

 이를 해결하기 위해서 아래의 두가지 방식을 사용할 수 있다.

 

1. 디폴트값 사용

String sayHello({
  String name="",   // 디폴트값 설정
  int age=0, 
  String country=""
}) {
  return "hello my name is $name, my age is $age and i lived in $country";
}

void main() {
  sayHello(name:"nico",
    age:12,
    country:"cuba",
    );
}

디폴트값을 지정해주어서 null 상황을 방지한다.

 

2. required 키워드 사용

String sayHello({
  required String name,  // required로 필수 값 명시
  required int age,
  required String country,
}) {
  return "hello my name is $name, my age is $age and i lived in $country";
}

void main() {
  print(sayHello(
    name: "nico",
    age: 12,
    country: "cuba",
  ));

  print(sayHello(name: "name", age: 12, country: "country"));
}

required 키워드는 해당 값이 필수 입력값임을 명시해준다. 따라서 함수 사용시에 해당 변수에 반드시 값을 넣어주어야해서 에러를 방지할 수 있다.

 

QQ operator

예시1)

위 코드를 아래와 같이 표현 가능하다.

그냥 삼항 연산자이다.

사실 이걸 말하려는 건 아니고 QQ Operator에 대해서 알아보자. QQ operator는 다음과 같은 구조를 가진다.

left ?? right

만일 left가 null이라면 right를 반환하고, null이 아닌 경우 left 자체가 반환된다. 따라서 위의 코드는 아래와 같이 바뀔 수 있다.

 

예시2)

left ??= right // left가 null이라면 right 값이 대입된다.


name ??= "it is null"; // name이 null이라면 "it is null"이 대입

typedef

typedef ListOfInts = List<int>;  //List<int>를 ListOfInts라는 이름으로 정의

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

void main() {
  var intList = [1, 2, 3, 4];
  print(reverseListOfNumbers(intList));
}

 

 

typedef문을 사용하면 특정 타입을 원하는 이름으로 정의할 수 있다. 위의 경우에는 List<int>를 ListOfInt라는 이름으로 정의하였다.

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

Dart- 클래스  (0) 2024.03.26
Dart- 데이터 타입 정리  (0) 2024.03.17
Dart- 변수 정리  (0) 2024.03.17