// 실행하려는 넘버의 문장만 남기고 모두 주석처리 후 실행

// 1. Defining a Function
// sayHello Function, ()안에는 Parameters 위치
String sayHello(String name) {
  return "Hello $name nice to meet you!";
}

// Fat arrow syntax 활용 추천
// String sayHello(String name) => "Hello $name nice to meet you!";

void main() {  
  print(sayHello('gino'));
}



// 2. Named Parameters
String sayHello(    
    {required String name, // required modifier는 입력 안되면 에러 출력
    required int age,
    required String country}) 
    
    {
      return "Hello $name, you are $age, and you com from $country";
    }

// void는 리턴이 없는 자료형
void main() {
    // 순서를 기억하지 않아도 named parmeters 가 지정되어 있어 아래와 같이 입력 가능
  print(sayHello(age: 22, name: 'gino', country: 'korea'));
  // 비교 : print(sayHello('gino', 22, 'korea')); // 순서를 기역해야함
}


// 3. Optional Positional Parameters  []
String sayHello(String name, int age, [String? country = 'cuba']) =>
    "Hello $name, I am $age years old and I work at $country";

void main() {
  var result = sayHello('nico', 12);
  print(result);
}


// 4. QQ Operator 
// ?? 와 ??=
// left ?? right : left not null --> left return or right return

String capitalizeName(String name) {
  name.toUpperCase() ?? 'ANON';
  // name != null ? name.toUpperCase() : 'ANON';
}

/*
위 코드를 풀어서 쓰면
String capitalizeName(String name) {
 if (name != null) {
  return name.toUpperCase();
 }
return 'ANON';
}
*/

void main() {
  String? name; // ? : name에 null 값을 허용
  name ??= 'gino'; // 값이 null 이면 gino 할당
  name = null // 다시 null 값을 할당
  name ??= 'another'; 
  print(name); // another가 출력됨 
}


// 5. Typedef 
// 자료형이 헷갈릴 때 도움이 될만한 alias 생성  

/*
List<int> reverseListOfNumbers(List<int> list) {
  var reversed = list.reversed; // iterable 자료형으로 변경
    return reversed.toList() // 다시 List로 반환해야함
}
*/

//  typedef 적용
typedef ListOfInts = List<int>;

ListOfInts reverseListOfNumbers(ListOfInts list) {
   var reversed = list.reversed; // iterable 자료형으로 변경
   return reversed.toList() // 다시 List로 반환해야함
}
profile
나무를 심는 사람

0개의 댓글