dart#3(nomad)

김지호·2023년 1월 8일
0

dart

목록 보기
1/1

Defining Function


void sayHello(String name){
  print("Hello $name! Nice to meet you!"); 
}

void는 C언어에서와 같이 리턴이 없는 함수를 정의할 때 쓴다.

String sayHello(String potato){
  return "Hello $potato! Nice to meet you!";
}

위 처럼 리턴 값이 String인 경우 void 대신 String을 쓴다. String을 리턴하는 함수라는 뜻인 것이다.

이 함수를 main 함수 내에서 사용하는 예시는 아래와 같다.

String sayHello(String potato){
  return "Hello $potato! Nice to meet you!";
}

void main() {
  print(sayHello('jiho'));
}

fat arrow(화살표 함수)를 이용해서 함수의 리턴을 지정할 수 있다.

String sayHello(String potato) => "Hello $potato! Nice to meet you!";

화살표를 지정하는 것이 리턴할 것이다. 이 함수는 한줄짜리 코드 함수일 때 사용하면 공간절약을 할 수 있다.

named argument


여러개의 인수를 받는 함수를 사용할 때 그 안의 인수를 순서에 맞게 알맞은 자료형으로 넣어야 에러가 발생하지 않는다. 그러나 인수가 정말 많을 경우 사용자가 이를 헷갈려 할 수 있다. 따라서 딕셔너리 형태로 쓰되, 순서에 구애받지 않게 하는 것을 named argument 기능이라고 한다. 예시는 아래와 같다.

String sayHello({
  String name = 'anon',
  int age = 99,
  String country = 'wakanda',
}){
  return "Hello $name, you are $age, and you come from $country.";
}

void main() {
  print(sayHello(
    name:'jiho',
    country : 'korea',
    age : 25,
  ));
}

함수의 인풋에 {}을 씌워 set처럼 만든 후 각각에 대한 디폴트 값을 지정해주면 순서와 상관 없이 사용할 수 있다. 디폴트 값을 사용하는 이유는 다트 언어는 null safety 중요시 하기 때문이다.
null safety를 방지하기 위해 'required'를 선언할 수도 있다.

required String name,
required int age,
required String country,

required modifier는 메인 함수에서 사용될 때 인풋이 반드시 입력되어야 함을 나타낸다.

optional position parameter


position parameter는 순서를 기억하고 있어야하는 함수 인풋이다.이 상태의 인풋 인수들은 모두 required이다. 그러나 선택적으로 하나의 인수에 대해서는 required를 적용시키지 않고자 할 때 조건문을 사용하여 구현할 수 있다.

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


void main() {
  var results = sayHello('jiho', 12);
  print(results);
}

중괄호 []를 침으로서 그 안에 만약 인수가 입력되지 않는다면 디폴트 값을 나타내게 할 수 있다.

QQ 연산자


??와 ?= 연산에 대해 알아볼 것이다.

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

String?을 씀으로써 이 변수가 null이어도 되고 null이 아니어도 되는 것이다.
위 함수를 fat arrow 형식으로 나타내면 다음과 같다.

String capitalizeName(String? name)=> name != null ? name.toUpperCase() : 'ANON';

이 함수 코드를 QQ operator(??)를 이용하면 다음과 같이 간단하게 만들 수 있다.

String capitalizeName(String? name)=> name?.toUpperCase() ?? 'ANON';

왼쪽이 null이면 ?? 오른쪽의 것을 리턴하고 왼쪽이 null이 아니면 그대로 왼쪽 값을 리턴한다.


??= 연산자는 null일수도 있는 변수가 null이라면 해당 값으로 초기화하는 연산을 한다. 예시는 다음과 같다.

void main() {
  String? name;
  name ??= 'jiho';
  name ??= 'ANON';
  print(name);
}

위 코드에서 name은 null 이기 때문에 jiho가 저장되고 그 이후에는 null이 아니기 때문에 ANON이 저장되지 않는다.

typedef


typedef는 자료형이 복잡할 경우 그 자료형에 대한 alias를 지정하여 추후에 동일한 자료형을 사용할 시에 편리하게 이용할 수 있다.

typedef ListOfInt = List<int>;

ListOfInt reverseListOfNumbers(ListOfInt list){
  var reversed = list.reversed;
  return reversed.toList(); //reversed를 하면 리턴이 리스트가 아니므로 바꿔줘야한다.
}

void main() {
  print(reverseListOfNumbers([1, 2, 3]));
}
profile
문을 끝없이 두드리는 사람

0개의 댓글

관련 채용 정보