Dart(다트) Function, Class

  • by


https://dart.dev/language/functions

다트는 객체 지향 언어그리고 함수도 객체이고 형식은 Function입니다.

→ 함수를 변수에 할당하고 다른 함수의 인수로 전달할 수 있습니다.

fat arrow sytax

: immediately return, 하나의 표현식만 포함할 때 사용

String sayHello(String name) => "Hello ${name} nice to meet you.";

num plus(num a, num b) => a + b;

Named Parameters ↔ Positional Parameters

Named Parameters ( {} )

:Parameter Name을 명시하는 것으로, 코드의 가독성을 높여(클린 코드), 순서에 관계없이 배치가 가능합니다.

required를 표시하고 필수 입력으로 설정합니다.

( required표시되지 않으면 옵션으로 취급하고 기본값을 지정하지 않으면 기본값은 null로 취급한다.

)

String sayHello({
  required String name,
  required int age,
  required String country,
}) => return "Hello $name, age: $age, country $country";

void main(){
  print(sayHello(
    name: "nico",
    age: 17,
    country: "korea",
  );
}

Optional Position Parameters ({ () })

// name, age는 필수값, ()를 통해 country를 optional로 지정
String sayHello(String name, int age, (String? country = "cuba")) { 
  return 'Hello ${name}, You are ${age} from the ${country}';
  }

void main() {
  var result = sayHello("nico", 10);
  print(result); // Hello nico, You are 10 from the cuba
}

QQ Operator (??)

: left ??right ▶ left === null, return right | left !
== null, return left

String capitalizeName(String? name) {
  return name?.toUpperCase() ?? ""; // == (name !
= null ?? name.toUppearCase() : "" ) }

: 이름?

→ name 가 null 의 경우, .toUpperCase() 호출이 불가능해, ?를 추가해 준다.

QQ Equals

: left ?= right ▶ left === null, allocate right ▷left = right | left!
= null, not allocate right

void main() {
  String? name;
  name ??= "nico"; // name = nico
  name ??= "dart"; // name = nico
  print(name); // nico
}

typedef

: 데이터 형식 별칭 만들기 – 데이터 형식에 사용자가 원하는 별칭을 추가할 수 있습니다.

typedef ListOfInts = List;

ListOfInts reverseListOfNumbers(ListOfInts list) {
  var reversedList = list.reversed.toList();
  return reversedList;
}

구조화된 데이터 형식을 만들 때, 수업 추천한다.

수업

다트 클래스

– new 생략, this 생략

class Player {
  final String name="jisoung";
  final int age = 17;
  
  void sayName(){
    print("Hi my name is $name") // class method안에서는 this를 쓰지 않는 것을 권장
  }
}


void main(){
  var player =Player(); // new 생략 가능
}

생성자

class Player {
  final String name;
  final int age;
  
  Player(this.name, this.age)
}

void main(){
  var player = Player("jisoung", 1500);
}

Named Constructor Parameter

class Player {
  final String name;
  final int age;
  
  Player({required this.name, required this.age})
}

void main(){
  var player = Player(name : "jisoung", age : 1500);
}

Cacscade Notation

: ‘..‘는 이전 객체를 가리킵니다.

void main(){
  var nico = Player(name: "nico", age: 17);
  ...name = "coco" // nico.name = "coco"
  ..age = 20  // nico.age = 20
}
// nico.name : coco, nico.age : 20

Enums

: To declare a simple enumerated typeuse the ‘열거 and list the values ​​you want to be enumerated

enum Team {
  red,
  blue,
}

class Player {
  String name;
  int age;
  Team team;

  Player({
    required this.name,
    required this.age,
    required this.team,
  });
}

void main(){
  var nico = Player(name: "nico", age: 17, team: Team.red);
  var coco = nico
  ..name = "sushi"
  ..age = 12
  ..team = Team.blue;
 }

Abstract Class

: 객체를 만들 수 없고 아무것도 작동하지 않는 메서드를 모았습니다.

→ 추상 클래스에서는 기능을 구현하지 않는다.

상속을 통해 메소드의 기능을 구현한다.

abstract class Animal {
  void walk();
}
class Cat extends Animal {
  // ...
  void walk(){
    print("4 foot!
"); } } class Monkey extends Animal { // ... void walk(){ print("2 foot!
"); } }

상속 (상속)

class Human {
  final String name;
  Human(this.name)
  
  void sayHello(){
    print("Hello $name")
  }
}

enum Team { blue, red }

class Player extends Human{
  final Team team;
  
  Player({
    required this.team,
    required this.name,
  }) : super(name);
  
  @override
  void sayHello(){
    super.sayHello();
    print("~!
~!
~!
") } }

Mixin

: no 생성자 클래스, 내부 속성 가져오기(재사용), 다중 상속

class Tall {
  final double tall = 190.00
}

class Strong {
  final int strong = 200
}

class Player with Tail, Strong {
 ...
}