20230513
오늘은 Dart의 Funtion에 대해서 알아보자.
14. Defining a Function
14-1 void?
위와 같이 sayHello 라는 함수를 선언했다.
하지만 항상 void라는 단어가 따라 붙는다.
void는 해당 함수가 아무것도 return하지 않는다는 뜻이다.
따라서 위와 같이
void를 문자열로 return할 경우
error가 발생한다.
만약 return을 받고 싶다면
위와 같이 void 대신하여 넣어주면 된다.
14-2 only main()?
또한 꼭 main함수 안에 선언할 필요가 없다.
위와 같이
main 함수에서
위에서 선언한 함수를 활용하여
출력할 수 있다.
14-3 fat arrow syntax
fat arrow syntax란
기호는 => 를 뜻하고
위와 같이 실행되고 곧바로 return하는 경우
함수 선언시 =>로
return과 { }를 대체할 수 있다.
가장 좋은 예로
계산기 어플을 만들 때 활용 가능한
연산 함수를 선언할 때 유용하다.
15. Named Parameters
위와 같이 sayHi라는 함수는
name, age, country를
positinal 파라미터로 받는다.
앞서 본것 처럼 main 함수에서
위의 선언한 함수를 사용하여
파라미터를 직접 넣어서 출력할 수 있다.
위와 같이named parameter를 사용하여출력하고 싶을 때는
위의 선언한 함수의 파라미터에
중괄호 { }를 넣어주면 된다.
하지만 여기서 Dart는 의문을 제기한다.
'만약 위의 파라미터가 전부 안오면 어떻게 할것이냐?'
앞서 배운것을 적용하면
' 너 null safety 문제를 어떻게 해결 할것이냐? '의 문제이다.
여기서 2가지 방법이 있다.
1. Named Parameter Default 값 정해주기
위와 같이 애초에 파라미터에
직접 default 값을 정의해주는 방법이 있다.
이렇게 하면
위와 같이 sayHi 함수는 name만 받았지만
출력에는 모든 파라미터가 적용되어
출력되는것을 확인할 수 있다.
2. Required
두 번째 문제는
바로 실질적인 문제에서 나온다.
우리는 앱을 만들기 위해 이 언어를 배우고 있고
default 값이란 정말 위험한 파라미터이다.
우리는 고객의 정보를 받아야 하기 때문이다.
이때 사용하는게 required이다.
위와 같이 선언한 함수의 파라미터 앞에
required를 붙여주면
반드시 호출 할때
위의 파라미터를 알려줘야 한다.
그럼 위와 같이 원하는 출력을 볼 수 있다.
16. Optional Positional Parameters
앞서 배웠던 함수 정의에서
여러 파라미터중
특정 파라미터만 required 하지 않게 하는게
바로 Optional Positional Parameter이다.
위와 같이 country라는 파라미터를
대괄호 [ ] 로 감싸주고
null safety인 ?를 사용하여 null safety를 방지해주고
default 값을 정의해줄 수 있다.
17. QQ Operator ?? & ??=
이름을 대문자로 바꿔주는 함수를 선언하고
이를 null 값도 받을 수 있게 만들어 보자.
우리가 배웠던대로 ?로 null safety를 줘서
선언하면 된다고 생각했겠지만
toUpperCase()라는 기본 내장 method는
그렇게 생각하지 않는다.
null이 올지도 모르는데
무조건 대문자로 바꿀 수 없기 때문이다.
이를 해결 하는 방법은 아래와 같다.
1. if문을 사용하여 처리
첫 번째 방법은if 문을 활용하는 방법이다.
위와 같이 null인 경우의 return과null이 아닌 경우의 return을 주면 된다.
이를 짧게도 만들 수 있다.
2. 연산자를 활용
위와 같이 fat arrow를 활용하여name이 null과 같지 않다면 toUpperCase()그렇지 않으면 ( : ) 'JM'을 return
이마저도 짧게 만들고 싶다면이 경우에는 QQ Operator를 활용할 수 있다.
3. QQ Operator( ?? )를 활용
QQ Operator는 쉽게 설명하자면
A ?? B 의 경우
A = null이면 B를 returnA != null 이면 A를 return
하지만 위의 경우toUpperCase()는 null safety가 필요하므로 name?로 해준다.
💡 ??= (QQ equals, QQ Assignment Operator)
QQ equals 혹은 QQ Assignment Operator로 불리는 이 녀석은
좌항의 변수가 null일 경우 자주 사용된다.
위와 같이 myname은 null일 수 있게 선언해준 다음
??= 을 사용하여null일 경우 'NA'로 return
null일 경우 'JM'으로 return 하게끔 정의할 수 있다.
그러므로 두 번째의 'JM'을 return 받는 코드는
절대 실행될 일이 없다.
18. Typedef
Typedef는
자료형이 헷갈릴때 도움이 될 alias을 만드는 방법이다.
우선 int로 이루어진 List를
역순으로 바꿔주는 함수를 선언한다.
그리고 위와 같이 typedef를 통해
아래 선언된 함수의 인자에 맞는
변수를 선언할 수 있다.
그리고 위와 같이
Datatype 자리에
위에서 선언한 typedef를 넣어줄 수 있다.
main()에서
int로 이루어진 List를 인자값으로 주고
프린트 하면?
위와 같이 정상적으로 출력된다.
💡 Map의 typedef
위와 같이 Map을 활용해서
typedef를 선언하고
main()에서
출력 시킬 수 있다.
'Hello App > Dart' 카테고리의 다른 글
Dart _ 기초 예제 5 (0) | 2023.05.15 |
---|---|
Dart_기초 예제3 (0) | 2023.05.12 |
Dart_기초예제2 (0) | 2023.05.11 |
Dart_특징, 기초 예제 (1) | 2023.05.10 |
VScode에서 Dart를 사용하기 위한 준비 - 윈도우 (0) | 2023.05.09 |