1. 함수 정의
void sayHello(parameter) {
print("Hello");
}
///
void sayHello(String name) {
print("Hello $name nice to meet u~");
}
- parameter안에 타입과 변수 명을 넣어서 print 한다
- void는 이 함수가 아무것도 return 하지 않는다는 의미
String sayHello(String name) {
return "Hello $name nice to meet u~";
}
///// 한줄자리 코드 위와 아래의 코드는 같다
String sayHello(String name) => "Hello $name nice to meet u~";
////출력
void main() {
print(sayHello('songyi'));
}
- 출력대신 return 하고 싶다면 다음과 같이 작성하면 된다
- 한줄짜리 코드는 fat arrow syntax사용하는것이 코드줄이기에 좋다 (=>)
2. Named Parameters
String sayHello({String name, int age, String country}) {
return "hello $name, you are $age, and you come from $country";
}
void main() {
print(sayHello(
age: 12,
country: 'jeonju',
name: "songyi",
));
}
- 많은 argument가 있을 시 name parameters를 활용하는게 좋다 단순하게 순서를 기억하는 대신 이름 : 값을 넣어주어 대입한다
- name시 중괄호{} 로 쌓아주면 끝
Null 값?
1. default value
String sayHello({
String name = "songyi",
int age = 100,
String country = "daejeon",
}) {
return "hello $name, you are $age, and you come from $country";
}
void main() {
print(sayHello(
age: 12,
));
//hello songyi, you are 12, and you come from daejeon
}
- named argument에 default value를 정하여 null 값을 받게 되더라도 기본 값을 return 한다
2. required
String sayHello({
required String name,
required int age,
required String country,
}) {
return "hello $name, you are $age, and you come from $country";
}
void main() {
print(sayHello(
name: 'songyi',
country: 'jeonju',
age: 12,
));
}
- required modifier를 이용해서 필수 값으로 만들어 준다
- required를 작성하게되면 sayhello에서 무조건 name, age, country를 가져야 되는 것을 알게된다
- 하나라도 없을시 실해하더라도 컴파일 되지 않는다
3. Positional Parameters
String sayHello(String name, int age, [String? country = "jeonju"]) =>
'Hello $name, you are $age years old, from $country';
void main() {
sayHello(
'soneyi',
12,
);
}
- country가 required하지 않게 하려면 대괄호 안?과 default 값을 넣어주면 된다 (필수가 아닌 값)
- [String? country = "jeonju"]
- ? = null이 될 수도 있다고 표시
4. QQ Operator
String capitalizeName(String? name) {
if (name != null) {
return name.toUpperCase();
}
return "haha";
}
void main() {
capitalizeName("songyi");
capitalizeName(null);
}
- 사용자가 null값도 보낼수 있게 한다면,
- parameter 타입 뒤에 ?물음표를 넣어준다 String? name name값이 null일수도 아닐수도 있다는 말이다
String capitalizeName(String? name) =>
name != null ? name.toUpperCase() : "haha";
- 짧게 => 를 사용하여 만들수도 있다
String capitalizeName(String? name) => name?.toUpperCase() ?? "haha";
//left ?? right
- 더 짧게 ?? QQ를 사용하여 만들 수 있다
- ??가 체크하는데 left가 null이면 right를, left가 null이 아니라면 그냥 left를 return 한다
void main() {
String? name;
name ??= "songyi";
name ??= "Lee";
print(name); //songyi
}
- ??=
- name이 null일수도 있는 스트링 하나 만든 후, ??= name값이 null이라면 우측 값을 할당하면 된다
5. Typedef
- 자료형이 헷갈릴 때 도움이 될 alias를 만드는 방법이다
typedef ListOfInts = List<int>;
ListOfInts reverseListOfNumbers(ListOfInts list) {
var reversed = list.reversed;
return reversed.toList();
}
void main() {
print(reverseListOfNumbers([1, 2, 3])); //3,2,1
}
- 숫자로 된 List를 가지고 List를 반대로 뒤집어 return 하는 함수를 만들 때
- typedef를 사용하여 이름을 부여?할 수도 있다
- 만약 구조화된 data 형태를 지정하고 싶다면, class를 만들어줘야 한다!
typedef UserInfo = Map<String, String>;
String sayHi(UserInfo userInfo) {
return "Hi ${userInfo['name']}";
}
void main() {
print(sayHi({"hahaha": "songyi"}));
}
'기초다지기 > Flutter&Dart' 카테고리의 다른 글
Dart Class (1) | 2023.04.06 |
---|---|
Flutter / Dart 빌드 (0) | 2023.04.05 |
Dart Data types (0) | 2023.04.04 |
Dart를 알아보자 (0) | 2023.04.03 |
vscode에서 dart 자동 줄정렬이 안 될 때 (1) | 2023.03.29 |