다트는 객체 지향 언어그리고 함수도 객체이고 형식은 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 {
...
}