dart function

Programming/Flutter 2023. 9. 4. 14:12
void sayHello(String name) {
  print('hello $name');
}
// no return

String sayHello2(String name) => 'hello $name';

- named parameter

// 순서없이 변수 전달 가능
// 중괄호를 추가하고 해당 이름을 그대로 사용함
String sayHello({String name, int age, String country}) {
	return 'hello $name, $age, and $country';
}

void main() {
	sayHello(
    	age: 12,
        country: 'cuba',
        name: 'aaaa',
    );
}

dart에서 null safety로 값이 빌 경우를 걱정하는데 아래 방법으로 해결한

1)  String sayHello({String name, int age, String country}) 코드에서 default값을 적용함

String sayHello({String name = 'an', int age = 99, String country = 'germany'})

2) default 값 적용 안하는 방법

require modifier를 이용함

String sayHello({
	required String name = 'an',
    required int age = 99,
    required String country = 'germany'
})

각 변수 앞에 required를 추가해주면 됨 

- optional positional parameters

String sayHello(
	String name,
  int age,
  [String? country = 'country temp']
) => 'Hello $name, $age year old from $country';

void main() {
  sayHello('aaa', 12);
}

마지막 country는 필수가 아닐 때, ?로해서 사용할 수 있다.

보통 named argument를 사용함 

- QQ operator

?? : 왼쪽 값이 null인지 체크해서 null이 아니면 왼쪽 값 리턴, null이면 오른쪽 값 리턴

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

??= : 변수 값이 null일 때를 체크해서 값 할당 가능

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

- typedef

자료형에 사용자가 원하는 alias를 사용할 수 있게 함

typedef ListOfInts = List<int>;
typedef userInfo = Map<String, String>;
// 이렇게 사용해도 되지만
// 구조화된 data 형태를 지정하고 싶다 -> class를 사용하는게 낫다

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

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

 

'Programming > Flutter' 카테고리의 다른 글

StatefulWidget  (0) 2023.09.05
dart classes  (0) 2023.09.04
dart data type  (0) 2023.09.04
dart 변수  (0) 2023.09.04