Dart function

Cheki·2023년 9월 11일
0

etc

목록 보기
18/22
post-thumbnail

Named Parameters

String sayHello(String name, int age, String country){
  return "Hello my name is $name, I'm $age, and I'm from $country";
}

sayHello라는 함수를 만들고 parameter로 name, age, country를 주었다. 그리고 위의 문장을 return 하도록 했다.

void main() {
  print(sayHello("bunny", 15, "korea"));
}

main에서 sayHello라는 함수를 print하도록 인자를 전달하면

Hello my name is bunny, I'm 15, and I'm from korea

Exited.

결과는 잘나온다. 하지만!!! 인자를 전달할때 bunny, 15, korea라고 전달하면 뭐가 뭔지 나중에 헷갈리는 경우가 올수도 있다...만약 인자가 저것보다 더 많다면? 그럴때 Dart에서 지원하는 named arguments를 사용하면 된다!

어떻게 사용하냐면 😎

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

main에서 사용할 함수에 요소의 이름과 값을 헷갈리지 않도록 명시해주는 것이다. 이렇게 하면 무엇이 age이고 name인지 명확해진다. (순서도 상관없다!)

하지만 main에서 오류가 날것이다. 아직 named argument를 지원하지 않기 때문

위의 함수에서 지원할수 있도록 고쳐보자 먼저

String sayHello(❗{❗String name, int age, String country❗}❗) {
  return "Hello my name is $name, I'm $age, and I'm from $country";
}

parameter에 {} 중괄호를 넣어야 한다.(특별히 이모지로 강조함ㅋㅋ)

그리고 첫번째 방법 => default 값을 정해준다.

Dart는 null safety가 있어서 사용자가 값을 주지 않을 경우를 걱정한다. 모든 인자에 접근하고 있는다 main에서 age만 주면 어쩔? name과 country가 비어있을수 있는 상황을 걱정하는 것이다.

이 경우를 대비해서

String sayHello({
  String name = 'non',
  int age = 0,
  String country = 'Uninhabited island',
}) {
  return "Hello my name is $name, I'm $age, and I'm from $country";
}

미리 parameter에 default값을 주는 것이다. 그러면 main에서 아무런 값이 전달되지 않아도 default 값이 출력될것이다. 이렇게!

void main() {
  print(sayHello());
}
Hello my name is non, I'm 0, and I'm from Uninhabited island

Exited.

만약 default값을 주지 않고 사용자에게서 값을 꼭 받아야겠다면 두번째 방법을 사용하자

String sayHello({
  required String name,
  required int age,
  required String country,
}) {
  return "Hello my name is $name, I'm $age, and I'm from $country";
}

parameter에 required 옵션을 주는 것이다. required를 주게 되면 사용자가 값을 입력하기 전에는 출력되지 않는다. 후후후후

함수에 값을 적지 않을경우 오류가 나면서 값이 required라고 말해주고 있다.

값을 전달하면

void main() {
  print(sayHello(
    age: 15,
    name: 'andy',
    country: 'korea',
  ));
}
Hello my name is andy, I'm 15, and I'm from korea

Exited.

성공!


QQ Operator

??, ??= 연산자에 대해서 알아보자

??

String capital(String name) => name.toUpperCase();

void main() {
  print(capital('bunny'));
}

name을 대문자로 변환해서 출력해주는 capital함수가 있다고 하자 다음과 같이 코드를 짜면 잘 실행되는 것을 알수 있다. 하지만 null값을 입력하고 싶다면?

void main() {
  print(capital(null));
}

이렇게 하면 오류가 생긴다ㅠㅠ 이를 해결하기 위해 연산자가 필요하다
먼저 String뒤에 ? 연산자를 붙여서 name이 null이 될수도 있다는 것을 알린다. 그러면 toUpper에서 오류가 난다.

String capital(String? name) => name.toUpperCase();

null일수도 있는 name에 toUpperCase를 실행할수는 없기 때문

String capital(String? name) => name != null ? name.toUpperCase() : 'Anony';

그래서! 위와 같이 ? 연산자를 활용한다. 사용하고 보니 삼항연산자 같다...

만약 name이 null이 아니라면 toUpperCase를 null이라면 Anony를 실행하라는 조건식

이것을 더 줄이려면 ?? 연산자를 활용한다.

String capital(String? name) => name?.toUpperCase() ?? 'Anony';

left ?? right => 좌향과 우향이 있을때 left가 null이면 right를 return 해준다. null이 아니면 left를 return

??=

??= 연산자는 null인지 아닌지를 알아보고 값을 할당해준다.

void main() {
  String? name;
  name = null;
  print(name);
  name ??= 'bunny';
  print(name); 
}

name은 null일수도 있다고 정의하고 처음에 name을 출력하면 null이 나온다. 그리고 ??= 연산자를 활용해서 만약 name이 null이면 bunny를 할당해달라는 코드를 작성! 그리고 다시 name을 출력하면 bunny가 나온다.

null
bunny

Exited.
profile
초보 웹공부러입니다

0개의 댓글