개요


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 에러 발생 고치는 방법은 세가지

  1. 디폴트 매개변수로 지정
  2. required 키워드 사용 (null 값이 아니다 라는 것을 알려주는 키워드)
  3. 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일리 없다 라는 경고