본문 바로가기
플러터(flutter)

Dart 기초 - 함수

by 기계공학 주인장 2023. 4. 5.
반응형

Dart는 다른 언어들이 갖지 않은 방법을 사용해서 함수를 만들 수 있는데

 

어떠한 방법들이 있는지 알아보자


Dart 기초 - 기본적인 함수 생성 방법

다음과 같은 방법을 사용해서 함수를 만들 수 있다.

 

void sayHi(String name) {
  print("Hi $name");
}

// Positional argument
String getName(String name, String hi) => 
  "${hi} My name $name";

// name required argument
void greeting({required String name, required String hi}) {
  print(hi + name);
}

void main() {
  sayHi("Lee"); // Hi Lee
  print(getName("Kim", "Hi")); // Hi My name Kim
  greeting(name: "Lee", hi: "Hi"); // HiLee
}

 

다른 언어과 다른 점이라면 name requeired argument가 있다는 것이다.

 

name requeired argument란

 

함수에 인자 값을 넣을 때  반드시 인자의 이름도 같이 지정해줘야 한다.

 


함수에 기본 값 넣어주기

코틀린은 간단하게 = 을 사용해서 함수 파라미터에 기본값을 줄 수 있지만

 

Dart는 조금 더 복잡하다.

 

다음과 같은 방법으로 함수 파라미터에 기본값을 지정할 수 있다.

 

// Optialnal positional argument
String getName(String name, [String? hi = "hi"]) => 
  "${hi} My name $name";

void main() {
  print(getName("Park"));
}

 

해당 파라미터를 [ ]로 감싼 다음

 

?을 붙여서 null이 될 수 있음을 알려줘야 한다.

 

(실제로는 null이 들어올 경우 기본값을 사용하도록 Dart가 컴파일해줌)


함수 파라미터의 null 처리하기

null을 처리하는 방법은 여러 가지가 있지만

 

Dart에서는 ?을 사용하여 여러 방법으로 null 값을 처리할 수 있다.

 

String capitalizeName1(String? name) => 
  name != null ? name.toUpperCase() : "";

String capitalizeName2(String? name) => 
  name?.toUpperCase() ?? "";

void main() {
  print(capitalizeName1(null)); // ""
  print(capitalizeName1("lee")); // LEE
  
  print(capitalizeName2(null)); // ""
  print(capitalizeName2("kim")); // KIM
}

 

? 을 하나만 사용하면 if문과 비슷한 방법으로 사용할 수 있다.

 

:을 기준으로 해당 조건이 참일 경우 왼쪽 코드를 실행하고 거짓일 경우 오른쪽 코드를 실행한다.

 

??처럼 2개로 사용하면 왼쪽 값이 null이 아닐 경우에는 그대로 해당 값을 사용하여 null일 경우에는 오른쪽 값을 반환한다.

 

또한 변수에도 ??을 사용할 수 있는데

 

변수에는 다음과 같은 방법으로 사용한다.

 

String getMyName(String? name) => 
  "my name is ${name ??= "Lee"}";

void main() {
	print(getMyName(null)); // my name is Lee
}

 

??= 을 사용하면 해당 변수가 null 일 때 오른쪽에 있는 값을 사용하게 된다.


typedef로 자료형에 별명 붙이기

함수에 사용되는 파라미터나 반환값에 자료형 코드가 아닌 직접 만든 이름을 대신 붙일 수 있다.

 

이는 나중에 코드가 많아질 때 매우 유용하다.

 

같은 자료형 데이터를 받고 반환하는 함수가 있다고 가정한다.

 

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

 

아무런 말이 없다면 List<int>가 의미하는 바가 뭔지 모르기 때문에 다음과 같이 바꿔줄 수 있다.

 

typedef ListOfInts = List<int>;

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

 

그리고 다음과 같이 사용할 수 있다.

 

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

 

 

Dart 기초 - 클래스

Dart 기초 - Constructor 생성하기 다음과 같은 방법으로 생성자를 만들 수 있다. class Player { late String name; late int score; Player(this.name, this.score); } void main() { var player1 = Player("Lee", 20); var player2 = Player("Kim"

android-developer.tistory.com

 

반응형


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


댓글