코드가 끝나면 ;(세미콜론) 하기
var는 값을 업데이트 할 수 있지만 같은 타입이어야 한다.
int, String 등 타입을 지정해줄 수도 있다.
- var 쓰이는 경우 : 함수나 메소드 내부에 지역변수를 선언할 때
- int, String 쓰이는 경우 : class에서 변수나 property를 선언할 때
Dynamic
dynamic는 어떤 타입이든지 들어갈 수 있는 타입을 말한다.
dynamic이 필요한 경우 : JSON형태로 값을 받아 어떤 타입이 들어갈 지 모르는 상황. dart가 어떤 타입인지 확인하도록 하면 Error를 줄일 수 있다.
void main() {
dynamic name;
if(name is String) {
name.StringMethod
}
if(name is int) {
name.intMethod
}
}
Null Safety ?
Null을 참조하더라도 Error가 뜨지 않도록 방지
String? name = 'name'; // name can be null
name = null;
if(name != null) {
name.isNotEmpty;
}
// or
name?.isNotEmpty;
final
바꿀 수 없는 변수
final String name = 'name';
// name = 'name'; X 오류일어남
late
데이터를 나중에 받는 것
api를 받을 때 자주 쓰임
late final String name;
// api 받기
name = 'name';
// name = '12'; final이라 오류
만약 late인데 값을 할당받기 전에 print를 하려한다 하면 오류를 반환
api를 받기 전에 late로 변수를 지정해주고 api 받을 때 변수에 저장
const
final과 같이 상수를 저장하는 타입
컴파일 할 때 값이 정해져 있어야 한다(API 받을 때 비어있으면 안됨)
ex) api_key = qwejopQEFIOPasfaipjwef123j#%EFji;
num
double과 int 형의 부모에 해당.
둘 다로 변환 가능
Collection List
var numbers = [1,2,3,4];
List<int> numbers = [1,2,3,4];
numbers.add(1);
var giveMeFive = true;
var numbers = [1,2,3,4,if(giveMeFive) 5];
print(numbers);
⇒ Collection if
String에 변수 넣고 싶은 경우
변수를 넣으려면 $name
var name = 'chang';
var age = 10;
var greeting = "hello everyone, my name is $name and I'm ${age + 2}";
// hello everyone, my name is chang and I'm 12
계산할 것이 있다면 ${ } 중괄호 안에 넣는다
탈출 기호 \ : 자바와 같음
Collection for
var oldFriends = ['nico', 'chang'];
var newFriends = ['hello', 'overwatch', 'gamer', for(var friend in oldFriends) "$friend"
print(newFriends);
// [hello, overwatch, gamer, nico, chang];
Map
key와 value가 있는 객체
key와 value는 타입을 맞춰줘야 한다.
var player = {
'name' : 'chang',
'number' : 123,
'value' : 234,
}
// Map<String, Object>
Map<List<int>, bool> player = {
[1,2,3,4]:true,
};
// 이와같이 Map 타입을 지정해줄 수도 있다
Set
var numbers = {1,2,3,4};
// Set<int> numbers = {1,2,3,4}; 와 같다
모든 요소들이 유일하다. 중복 X
List처럼 순서가 있다.
{ } 대괄호로 감싸준다
name arguments
- required
String sayHello({
required String name,
required int age,
required String country,
}) => "Hello $name, you are $age, and you came from $country";
: 파라미터를 필요로 한다.
- default value
String sayHello({
String name = 'chang',
int age = 99,
String country = 'korea'
}) {
return "Hello $name, you are $age, and you came from $country";
}
: 파라미터를 안 작성해줘도 기본값이 들어간다.
Recap
파라미터에 이름을 넣는것. 12는 age, 'cc'는 country, 'hi'는 name
String sayHello({
required String name,
required String country,
required int age,
}) {
return "Hello $name, you are $age, and you come from $country";
}
// 이와같이 작성하는 파라미터를 named parameter라 한다
void main() {
sayHello(
age:12,
country:'cc',
name:'hi',
)
Recap을 통해 파라미터를 사용하는 곳에서 어떤 파라미터를 사용하는지 쉽게 알아볼 수 있다
Optional & Positional Parameters
sayHello(1,2,3) ← 이를 positional parameter라 한다
Null 값을 받아도 함수가 컴파일 될 수 있도록 하는 것이 Optional parameter
String sayHello(String name, int age, [String? country = 'cuba']) =>
'Hello $name, you are $age years old from $country';
void main() {
var results = sayHello('name', 12);
print(results);
} // Hello name, you are 12 years old from cuba
[String? country = ‘cuba’] : country가 Null이라면 cuba를 할당하고 값을 받아온다면 그 값을 할당한다
QQ Operator
Null인지 비 Null인지에 따라 값 선택
String capitalizeName(String? name) =>
name?.toUpperCase() ?? 'ANON';
left ?? right
left가 Null인 경우 right 반환
left가 Null이 아닌 경우 left 반환
QQ equals
Null일 때 값 할당
String? name;
name ??= 'name';
name = null;
name ??= 'another';
print(name); // another
left ??= right
left가 Null일 때 left에 right 할당
typedef
타입을 정의
typedef ListOfInts = List<int>;
ListOfInts reverseListOfNumbers(ListOfInts list) {
var reversed = list.reversed;
return reversed.toList();
}
void main() {
print(reverseListOfNumbers([1,2,3]));
}
연산자
- 산술 연산자: +, -, *, /, ~/, %, ++, --
- 대입 연산자: +=, -=, *=, /=, ~/=, %=
- 비교 연산자: >, >=, ==, <, <=, !=
- 논리 연산자:&&, ||, !
- 유형 테스트 연산자: is, is!
- 삼항 연산자: 판별식 ? A문 : B문
'FrontEnd > Flutter' 카테고리의 다른 글
Flutter 명령어 (0) | 2024.05.21 |
---|---|
Equatable (0) | 2024.05.05 |