개요
Flutter를 공부하기 위한 Dart 공부
함수
dart의 시작은 main.dart>main()에서 시작됨 (필수 요소)
dart의 출력문 print(’문자열’);
함수 선언은 다른 언어와 유사
String Hello({String? name, int? age, String? country})
{
return "Hello $name you are $age and from $country";
}
만약 코드가 한줄 이면
String Hello({String? name, int? age, String? country}) =>
"Hello $name you are $age and from $country";
이렇게 줄일 수 있음
일반적으로 매개변수 있는 함수를 사용할 때는 Named Parameter를 사용하는 것을 지향(평소에 사용했던 매개변수 선언 순서에 맞는 호출 방법은 Positional parameter)
나중에 코드를 볼 때 이해가 쉽지 않기 때문도 있고, 특히 해당 함수가 같은 파일 내에 있지 않으면 어려움
Named Parameters
함수 호출 시 매개변수 순서와 상관없이 변수에 지정해 주는 것 (함수 선언시 매개변수를 {}로 감싸야 함
String Hello({String name, int age, String country}) => "Hello $name you are $age and from $country";
void main() {
print(Hello(age: 25, country: "Korea", name: "Mindol"));
}
❓ 하지만 이렇게 하면 null safety 에러 발생 고치는 방법은 세가지
- 디폴트 매개변수로 지정
- required 키워드 사용 (null 값이 아니다 라는 것을 알려주는 키워드)
- null safety 사용 (자료형? 변수명)
디폴트 매개변수로 지정
String Hello({String name = "who", int age = 10, String country = "usa"}) =>
"Hello $name you are $age and from $country";
void main() {
print(Hello());
print(Hello(age: 25, country: "Korea", name: "Mindol"));
}
// 결과
Hello who you are 10 and from usa
Hello Mindol you are 25 and from Korea
Exited
required 키워드 사용
String Hello(
{required String name, required int age, required String country}) =>
"Hello $name you are $age and from $country";
void main() {
print(Hello(age: 25, country: "Korea", name: "Mindol"));
}
null safety 사용
String Hello({String? name, int? age, String? country}) => "Hello $name you are $age and from $country";
void main() {
print(Hello(country: "Korea", name: "Mindol"));
}
// 결과
Hello Mindol you are null and from Korea
Exited
Optional
named parameter를 적용하지 않고 특정 매개변수를 required하지 않게 하는 방법
String Hello(String name, int age, [String? country = 'Korea']) =>
"Hello $name you are $age and from $country";
void main() {
print(Hello("Mindol", 25));
}
삼항 연산자
String capitalizeName(String? name) =>
name != null ? name.toUpperCase() : 'NULL';
void main() {
print(capitalizeName(null));
print(capitalizeName("mindol"));
}
// 결과
NULL
MINDOL
Exited
String capitalizeName(String? name) => name?.toUpperCase() ?? 'NULL';
void main() {
print(capitalizeName(null));
print(capitalizeName("mindol"));
}
// 결과
NULL
MINDOL
Exited
좌항 ?? 우항
좌항이 null이면 우항을 반환, 좌항이 null이 아니면 좌항을 반환
변수명 ??= 값 : 만약 변수가 null이면 값을 적용
void main() {
String? name;
name ??= 'mindol';
name ??= 'Seok';
print(name);
}
// 결과
: Warning: Operand of null-aware operation '??=' has type 'String' which excludes null.
main.dart:4
name ??= 'Seok';
^
mindol
Exited
❓ 위의 경고는 3번째 줄 이후부터는 null일리 없다 라는 경고