main 함수는 모든 dart 프로그램의 엔트리 포인트임 -> 중요
main 함수에서 내가 쓴 코드가 호출됨
void main() {
print("cat");
}
자스나 타스 같은 다른 프로그래밍 언어는 formmatter가 자동으로 세미콜론을 달아주지만 dart는 그런 기능이 없음 그래서 꼭 세미콜론을 붙여야함(중요!!)
// no.1
void main() {
var name ="haha"; // 값을 업데이트 할 때 변수의 원래 타입과 일치해야함
name = "하하";
}
// no.2
void main() {
String name ="haha"; // 명시적으로 변수의 타입 지정
name = "하하";
}
둘 다 변수를 생성하는 방법이다
각각의 방법은 어떨 때 사용될까?
첫 번째 방법은 관습적으로 함수나 메소드 내부에 지역 변수를 선언할 때 var를 사용함
그리고 class에서 변구나 프로퍼티를 선언할 때는 두 번째 방법같이 타입을 지정함
다이나믹은 여러가지 타입을 가질 수 있는 변수에 쓰는 키워드임
그러면 다이나믹은 왜 사용하는 걸까?
-> 변수가 어떤 타입인지 알기 어려운 경우들이 종종 있기 때문
void main() {
Dynamic name;
name = "하하";
name = 123;
name = false;
}
다이나믹은 정말 필요할 때만 사용하자
null safty는 개발자가 null을 참조할 수 없도록 하는 것임
왜냐면 null을 참조하면 런타임 에러가 생기기 때문
null safty는 어떤 변수 혹은 어떤 데이터가 null이 될 수 있음을 명시하는 역할을 함
void main () {
String haha = 'haha';
haha = null;
if(haha != null) {
haha.isNotEmpty
}
}
haha라는 변수가 문자열이나 null 둘다 될 수 있게 하려면 ?
를 붙임
void main () {
String? haha = 'haha';
haha = null;
if(haha != null) {
haha.isNotEmpty
}
}
이렇게 하면 dart에서 haha라는 변수가 null이 될 수 있다는 걸 알 수 있음
void main () {
String? haha = 'haha';
haha = null;
haha?.isNotEmpty
}
변수 haha가 null이 아니라면 isNotEmpty속성을 달라는 뜻임
if문을 짧게 단축해서 작성함
한 번 정의된 변수를 수정할 수 없게 만들려면 final
을 사용함
자바스크립트의 const와 비슷...
// final 사용 전
void main () {
String name = "haha";
name = "hoho";
}
// final 사용 후
void main () {
final name = "haha";
name = "hoho" // Error!!!!!
}
final을 사용해서 만든 변수는 수정할 수 없음
late
는 초기 데이터 없이 변수를 선언할 수 있게 해줌
void main () {
late final String name;
// api로 데이터를 받아서 변수에 값을 할당함
name = "haha";
}
late를 사용해 변수를 먼저 만든 후 그 안의 값(데이터 등)은 나중에 받아서 할당할 수 있는 것이다(하지만 원래 정의한 타입에 맞는 값이 들어가야함)
주로 API를 사용해 작업할 때 많이 사용하게 될듯
다트에도 const
키워드가 있다 두둥
하지만 자바스크립트의 const와는 다르다
(자바스크립트의 const는 dart의 final과 비슷함)
dart의 const는 compile-time constant를 만들어줌
즉, const는 컴파일 할 때 값을 알 수 있는 변수를 만드는 것임
(코드를 컴파일하기 전에 알고 있어야 함)
void main () {
const API = fetchApi();
}
const는 컴파일 시간에 알려진 상수를 선언하는 데 사용되고, final은 런타임에 알려진 상수를 선언하는 데 사용할 수 있음
const pi = 3.14; // 컴파일 시간 상수
final currentTime = DateTime.now(); // 런타임 상수
다트 재밌다...