newChobo
Published 2023. 1. 31. 19:30
Dart 시작하기 #3 FUNCTIONS 공부/Dart

1. #3.0 Defining a Function (04:15)

함수 선언?

<cpp />
void sayWhat(String name) { // 반환형, 함수명, 인자 print("Hello $name nice to meet you!"); } String sayHello(String name) { return "Hello $name nice to meet you!"; } //fat arrow syntax String sayHello1(String name) => "Hello $name nice to meet you!"; num plus(num a, num b) => a + b; void main() { sayWhat('jeongkyu'); print(sayHello('nico')); print(sayHello1('nick')); /* Hello jeongkyu nice to meet you! Hello nico nice to meet you! Hello nick nice to meet you! */ print(plus(5, 3.2)); /* 8.2 */ }

2. #3.1 Named Parameters (08:54)

named parameter : flutter에서 사용되는 개념

인자의 이름을 지정해서 활용할 수 있도록 한다.

named argument 활용할 경우

null에 대해 default값으로 처리할지, nullable로 처리할지, required로 처리할지 생각해보면 될 듯 하다.

<cpp />
String sayHello(String name, int age, String country) { return "Hello $name, you are $age, and you come from $country"; } String sayNamedHello({String? name, int? age, String? country}) { //중괄호만 더하면 null값이 오는것에 대해 오류 표시(null safety) //컴파일도 불가. 이전에 배웠던 ? 를 붙여 null이 가능하도록 할 수도 있음 return "Hello $name, you are $age, and you come from $country"; } String sayNamedHello1({ required String name, required int age, required String country, }) { //인자의 값을 필수로 받아오도록 return "Hello $name, you are $age, and you come from $country"; } String sayNamedHello2( {String name = 'Peter', int age = 99, String country = 'US'}) { //null safety를 유지할 경우 //이를 default value를 활용해 바꿀 수 있음 return "Hello $name, you are $age, and you come from $country"; } void main() { //기존에는 인자에 값을 넣을때 순서를 기억하여 사용해야 했음 print(sayHello( "Nico", 13, 'korea', )); //Hello Nico, you are 13, and you come from korea //named argment 활용시 print(sayNamedHello( age: 14, name: 'Haru', country: 'japan', )); //Hello Haru, you are 14, and you come from japan //named argment, null 발생시 print(sayNamedHello( age: 15, name: 'Kay', )); //Hello Kay, you are 15, and you come from null //required 활용할 경우 //sayNamedHello2(); //인자가 없으면 사용 불가 //required된 모든 인자가 있어야 사용 가능 print(sayNamedHello1( age: 16, name: 'Jay', country: 'England', )); //Hello Jay, you are 16, and you come from England //named argment와 default value 활용시 print(sayNamedHello2()); //Hello Peter, you are 99, and you come from US }

3. #3.2 Recap (05:49)

parameter : positional parameter, named parameter 2가지로 나뉨.

positional은 인자가 순서에 따라 구별되는 애들이고, named parameter은 이름에 따라 구별되는 애들.

 

positional parameter

위치를 각각 기억해야 함. 좋은 방식은 아님

 

named parameter

이름만 보고 필요한 인자를 알 수 있음. 순서 상관 없음, 이름을 통해 통제하므로 헷갈릴 여지 적음.

 

인자를 주지 않을때에 관한 처리 방법

required : 인자가 오지 않으면 컴파일 안함

default value : 인자가 없을때 자동으로 지정된 값을 할당함.

 

4. #3.3 Optional Positional Parameters (03:02)

Optional Positional Parameters?

positional : 순서에 따라

named : 이름에 맞춰

optional : 있을 수도, 없을 수도

<cpp />
String sayHello(String name, int age, [String? country = 'cuba']) => "Hello $name, you are $age, and you come from $country"; void main() { var results = sayHello('nico', 12); print(results); //Hello nico, you are 12, and you come from cuba }

 

5. #3.4 QQ Operator (05:09)

연산자..?

??

?=

삼항연산자?

 

??

left ?? right : left가 null이면 right 리턴, 아니면 left 리턴

<cpp />
//기본 함수 String capitalizeName(String? name) { if (name != null) { return name.toUpperCase(); } return "ANON"; } //fat arrow + 삼항연산자 String capitalizeName1(String? name) => name != null ? name.toUpperCase() : "ANON"; //?? 연산자(QQ) 활용 //left ?? right : left가 null이면 right 리턴, 아니면 left 리턴 String capitalizeName2(String? name) => name?.toUpperCase() ?? "ANON"; void main() { print(capitalizeName('nico')); print(capitalizeName(null)); print(capitalizeName('kim')); print(capitalizeName(null)); print(capitalizeName('cho')); print(capitalizeName(null)); /* NICO ANON KIM ANON CHO ANON */ }

 

??=

<cpp />
void main() { String? name; name ??= 'nico'; //만약 name이 null이라면, 값을 할당해라 name ??= 'another'; //만약 name이 null이라면, 값을 할당해라 print(name); //nico name = null; //만약 name이 null이라면, 값을 할당해라 name ??= 'another'; //만약 name이 null이라면, 값을 할당해라 print(name); //another }

 

6. #3.5 Typedef (04:50)

class 가기 전에 typedef를 보자

자료형이 헷갈릴 때 도움이 될 alias를 만드는 방법???

alias : 별명

 

활용 예시 : typedef ListOfInts = List<int>;

<cpp />
typedef ListOfInts = List<int>; List<int> reverseListOfNumbers(List<int> list){ var reversed = list.reversed; return reversed.toList(); //.toList()를 하는 이유는, .reversed를 하면 List랑은 조금 다른 iterable이 되기 때문 } //List<int>대신에 위에서 선언한 ListOfInts를 사용할 수 있다. //Dart에게는 둘 다 같은 자료형이다. ListOfInts reverseListOfNumbers1(List<int> list){ var reversed = list.reversed; return reversed.toList(); } void main() { print(reverseListOfNumbers([1, 2, 3])); //[3, 2, 1] print(reverseListOfNumbers1([1, 2, 3])); //[3, 2, 1] }

map에서  사용도 가능은 함. 하지만 아래처럼 정상동작 안할 수 있음.

<cpp />
typedef UserInfo = Map<String, String>; String sayHi(UserInfo userInfo){ return "Hi ${userInfo['name']}"; } void main() { print(sayHi({"fhjkfakjhafsdjkhl": 'nico'})); //Hi null print(sayHi({'name': "Kay"})); //Hi Kay }

 

 

다음시간에 class를 배워 활용해보자

'공부 > Dart' 카테고리의 다른 글

Dart 시작하기 #4 CLASSES  (0) 2023.02.01
Dart 시작하기 #2 DATA TYPES  (0) 2023.01.31
Dart 시작하기 #1 VARIABLES  (0) 2023.01.20
Dart 시작하기 #0 INTRODUTION  (0) 2023.01.20
profile

newChobo

@새로운뉴비

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!