Dart에 발 들이기 4

바람찬허파·2023년 8월 11일
0

사람책 개발 공부

목록 보기
4/6
post-thumbnail

노마드 코더의 'Dart 시작하기' 강의 #3 FUNCTIONS을 기반으로 정리하였습니다.

Optional Positional Parameters

positional parameter의 형식에서, 필수적이지 않은 인자를 어떻게 표시할 수 있을까?

String sayHello(
  String name,
  int age,
  String country,
) =>
    "Hello my name is $name, age $age, from $country";

void main() {
  print(sayHello('Jisoo', 20, 'Korea'));
}

이 코드에서 country는 필수 인자가 아니라면?
optional positional parametr는 아래 3가지를 만족시키면 된다.

  • 대괄호 씌움
  • 해당 변수가 nullable함을 밝힘 (String? name)
  • default value를 부여
[String? country = 'Korea',]
  String name,
  int age, [
  String? country = 'Korea',
]) =>
    "Hello my name is $name, age $age, from $country";

void main() {
  print(sayHello('Jisoo', 20));
}
//Hello my name is Jisoo, age 20, from Korea
//Korea 데이터를 입력하지 않아도, default value에 따라 출력 됨. 

QQ operator (null aware operator)

String nameToUpperCase(String name) {
  return name.toUpperCase();
}

void main() {
  print(nameToUpperCase("jisoo"));
}
//name이 null일 수 있게 만들고 싶다면
String nameToUpperCase(String? name) {
  if (name != null) {
    return name.toUpperCase();
  }
  return 'ANON';
}

void main() {
  print(nameToUpperCase("jisoo"));
  print(nameToUpperCase(null));
}
// JISOO
// ANON
//name이 null일 수 있게 만들고 싶다면
//fat arrow syntax
String nameToUpperCase(String? name) =>
    name != null ? name.toUpperCase() : 'ANON';

void main() {
  print(nameToUpperCase("jisoo"));
  print(nameToUpperCase(null));
}
//QQ를 사용해 left side가 null이라면 right side를 return 함.
String nameToUpperCase(String? name) => name?.toUpperCase() ?? 'ANON';

void main() {
  print(nameToUpperCase("jisoo"));
  print(nameToUpperCase(null));
}

??(QQ)는 left side ?? right side > left side가 null이라면 right side를 return

void main() {
  String? name;
  print(name);
  name ??= 'Alice';
  print(name);
  name = null;
  name ??= 'Baeck';
  print(name);
}
//null
// Alice
// Baeck

name ??= 'Alice' > name이 null일 경우 'Alice'를 대입

Typedef

자료형에 alias를 붙일 수 있게 함
Map<String,String>을 UserInfo로 alias.

typedef numLists = List<int>;
numLists reverseListOfNumbers(numLists numbers) {
  var reversed = numbers.reversed;
  return reversed.toList();
}

void main() {
  print(reverseListOfNumbers([
    1,
    2,
    3,
    4,
    5,
    6,
  ]));
}
typedef UserInfo = Map<String, String>;

String sayHi(UserInfo userInfo) =>
    "Hi my name is ${userInfo["name"]}, live in ${userInfo["living"]}";
void main() {
  print(sayHi({
    "name": "jisoo",
    "living": "home",
  }));
}
//Hi my name is jisoo, live in home

추가적으로, Map 자료형의 key값으로 value를 가져오기 위해서는 ${}같이 중괄호가 필요함.

0개의 댓글