Dart는 구글이 개발한 프로그래밍 언어로써 Flutter에 사용됩니다.
기본적으로 Main() method는 필수
자동 타입, 처음 선언 타입으로 고정
함수, 메소드안에서 지역변수 선언할 때 보통 var 사용
class에 사용될 때는 주로 구체화 ex) int, String
print(‘${name.runtimeType}’); // 변수타입 프린트
Ex)
String? name; // null로 지정이 가능하다
name?.inNotEmpty // name? 을 if(name != null)처럼 사용 가능
Ex)
print(name2!); //name2는 null이 아니다
ex)
final String name = ‘asd’;
name = ‘zxc’; // error
const String name = ‘asd’;
name = ‘zxc’; // error
변수 타입 생략 가능
final String name = ‘asd’;
const String name = ‘asd’;
//DateTime.now(); //실행되는 순간의 시간
final DateTime now = DateTime.now(); // 가능
const DateTime now2 = DateTime.now(); //불가능, 빌드타임 모름
.
.
.
.
.
.
자료형 모두 클래스
List<int> numbers =[1,2,3,4]; // var numbers = [1,2,3,4]; 와 같음, 보통 var 사용을 선호
var giveMeFive = true ;
var numbers = [1, 2, 3, 4, if(giveMeFive) 5]; // == numbers.add(5); 와 동일
print(‘$name and ${age+1}’);
프린트할 때 변수 넣으려면 $뒤에 변수
계산하려면 ${변수 + 1}
for (var '새로운변수' in '추가할 리스트') "$'새로운변수' ",
Ex)
var olds = [‘a’,‘b’];
var news = [
‘c’,
‘d’,
for(var friend in old) “good $friend”, // 새로운변수 friend
];
print(news); //[c, d, good a, good b];
Set<int> numbers = {1,2,3,4};// var numbers ={1,2,3,4};
fat arrow syntax // return 과 같은 기능
Name argument //파라미터 중괄호{}로 감싸기
Ex)
String sayHello({String name, int age}){
return “$name, $age”;
}
void main(){
print(sayHello(
age: 11,
name: ‘Son’,
));
}
required // 필수값으로 지정, null safety 때문에
// 예로 사용자가 name없이 호출 할 경우 방지
Ex)
String sayHello({
required String name.
required int age,
})
return “$name, $age”;
}
혹은 default value 설정해주기
Ex)
String sayHello({
String name = ‘none’,
int age =‘99’,
})
return “$name, $age”;
}
//required와 default value 설정은 상황에 맞게 사용
특정 파마미터는 required 하지 않게하려면
대괄호[]와 ?(nullable), default value 가 있어야 함
잘 사용되지 않음
Ex)
String sayHello(
String name.
int age,
[String? country = ‘korea’])=>
“$name, $age, $country”;
}
void main(){
var results = sayHello(‘Son’, 12);
}
fat arrow
??
left ?? right - 왼쪽이 null이라면 오른쪽 return, 아니라면 왼쪽 return
??=
number ??= 1 - 왼쪽 값(number)가 null이라면 오른쪽 값으로 변경
typedef 변수 = 자료형
Ex) typedef ListOfInt = List<int>;
Class 변수
Ex)
Player(this.name, this.age); // 아래의 코드와 동일, 짧게 사용가능
Player(String name, int age){
this.name = name;
this.age = age;
}
Ex)
class Player
final String name;
int age;
Player({this.name, this.age});
}
void main(){
var player = Player(
age: 11,
name: ‘Son’, //마지막 콤마(,) 넣어줘야함, 코드 포맷팅용
);
// 플러터에는 이런 방식이 많음
}
class Player
final String name;
int age;
Player({required this.name,
required this.age,
});
}
Player.creatBluePlayer({
required String name,
required int age
}) : this.age = age, //입력받은 값
this.name = name, //입력받은 값
this.team = ‘blue’, //기본 값
this,xp = 0; //기본 값
Cascade Notation //객체 내 변수 변경
// 세미클론 ; 없애고, ..추가
Ex)
var son = Player(name: ‘Son’, age: 30, team: tot)// 세미클론; 없애고
..name = ‘Kim’ //son.name = ‘Kim’과 같음
..age = 25; // son.age = 25; 와 같음, 마지막에 ;붙이기
// ..sayHello();// 메소드 사용도 가능
Ex)
enum Team { red, blue } // “ ”, ‘ ’ 사용하지 않음
// String team =’red‘; -> Team team = Team.red;
Ex)
abstract class Human{ //추상 클래스
void walk();
}
class Player extends Human{ //상속 extend
void walk(){
print(“walking”); // 추상클래스의 메소드 구현
}
}
Ex)
class Human{
final String team;
String name;
void say Hello(){
print(“Hi”);
}
}
class Player extends Human{
Player({
required this.team
required String name
}) : super(name);// 부모클래스 생성자에 name 전달
void say Hello(){
super.sayHello(); // 부모클래스 메소드사용
print(“Hello”); //오버라이딩
}
}
생성자가 없는 클래스
플러터에서 자주 사용됨
extends 가 아닌 with 사용
상속아님, Mixin 내부 프로퍼티, 메소드 가져오는 것, 여러클래스에 재사용 가능
감사합니다.