Dart에서 Function을 정의하고 사용하는 방법에 대해 알아보았다.


Function

String sayHello(String name) {
	return "Hello $name nice to meet you!";
}

// 위 함수와 같음
// 함수가 한 줄 짜리일 때 사용
String sayHello(String name) => "Hello $name nice to meet you!";

void main() {
	sayHello("JP");
}

Named Parameters

String sayHello(String name, int age, String country) {
	return "Hello $name, you are $age, and you come form $country";
}

// Named Parameter를 사용할 때는 매개변수 받을 때 {} 추가
// default 값 설정 가능
// 실제로 값을 받아야 할 때에는 required 키워드를 타입 앞에 적어준다.
String sayHello2({String name = "Default Value", int age = 20, required String country}) {
	return "Hello $name, you are $age, and you come form $country";
}

void main() {
	// not good
	sayHello("JP", 31, "YongIn");
	
	//using named argument - good
	sayHello(age:12, country: "YongIn", name: "JP");
}

Optional Positional Parameters => 잘 안씀

// Optional 파라미터를 쓰려면 대괄호 안에 '?'로 인자가 있을 수도 없을 수도 있다는 것을 명시하고, Default Value를 설정해준다.
String sayHello(
	String name, 
	int age, 
	[String? country = 'Dongtan']
) => 'Hello $name, you are $age years old from $country';

void main() {
	sayHello("JP", 31);
}

QQ Operator

// 인자로 null이 들어올 경우 Optional('?')로만 해결할 수 없다.
// if문으로 name이 있을 경우에만 uppercase 해주거나 3항연산자로도 처리할 수 있다.
String capitalizeName(String? name) => name != null ? name.toUpperCase() : 'ANNO';

// 위 함수를 더 짧게 하면 아래와 같다.
// ??를 쓸 경우 좌항이 null이면 우항을 설정한다.
// JS에서 || 연산자랑 비슷한듯?
String captializeName(String? name) => name?.toUpperCase() ?? 'ANNO';

// ??= 연산자도 있다.
String captializeName(String? name) {
	name ??= "People";  // name이 null이면 People 값을 설정해준다. ??랑 똑같은듯
}

void main() {
	capitalizeName("jp");
	capitalizeName(null);
}

TypeDef

// TypeDef란 자료형이 헷갈릴 때 alias를 만드는 것
// reverseListOfNumbers 함수는 List<int> 타입을 리턴받으려고 할 때 정의해둔 ListOfInts를 사용할 수 있다.
// 함수 정의시 리턴 타입 뿐만 아니라 매개변수로도 사용할 수 있는 등 활용이 무궁무진하다.
typedef ListOfInts = List<int>;

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

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

'Mobile' 카테고리의 다른 글

[Flutter] Flutter 설치방법  (0) 2023.10.12
[Flutter] Flutter의 동작 방식  (0) 2023.10.10
[Dart] Class 및 다양한 Class 속성에 대해  (0) 2023.10.10
[Dart] Dart의 Data Types  (0) 2023.10.09
[Dart] Dart의 변수 정의  (3) 2023.10.09

+ Recent posts