- var type은 변수의 type을 유추한다.
var name3 = '블랙핑크';
var number = 20;
// 변수의 값이 실행되는 순간에 어떤 타입인지 알려준다
print(name3.runtimeType);
- 글자를 이어쓸때는 +.${variable} 를 사용한다.
String name = '블랙핑크';
String name2 = '제니';
print(name + ' ' + name2);
print('${name} ${name2}');
print('$name $name2');
print('$name.runtimeType') // x. name까지만 변수 인식. {}해주어야 함
- var는 한번 선언하면 다른 타입으로 중간에 변경이 불가능하다. dynamic은 변경 가능하다.
dynamic name = '쩡이';
var name2 = '블랙핑크';
name = 2;
name2 = 5; // error 발생
- nullable - null이 될 수 있다. / non-nullable - null이 될 수 없다. / null - 아무런 값도 있지 않다.
- ?는 null이 될 수 있는 타입을 의미한다.
String name = '쩡이';
print(name);
// name = null; error 발생
String? name2 = '블랙핑크';
name2 = null;
- null이 될 수 있는 타입에서, !는 현재 값은 null 이 아님을 의미한다.
String? name = '블랙핑크';
print(name!);
- final / const 로 지정하면 변수값을 바꿀 수 없다.
final String name = '쩡이';
//name = '제니'; error 발생
const String name2 = '죄니';
//name = '제니'; error 발생
- final과 const의 차이?
- const 로 지정하면 빌드타임에 값을 알고있어야 한다. 런타임 성능이 더 좋다.
- final은 실행시점에 값을 결정한다. (빌드타임에 값을 알고있지 않아도 된다.)
final DateTime now = DateTime.now();
print(now); // 코드가 실행될때의 Time
// const DateTime now2 = DateTime.now(); error 발생
print(now2); // 코드가 실행될때의 Time
- is / is! 키워드로 타입(type)을 검사한다.
print(1 is int);
print(1 is! int);
- List
// List
List<String> blackPink = ['제니', '지수', '로제', '리사'];
print(blackPink.length);
blackPink.add('현정');
print(blackPink);
blackPink.remove('현정');
print(blackPink);
print(blackPink.indexOf('로제'));
- Map
// Map
// Key / Value
Map<String, String> dictionary = {
'Harry Potter' : '해리포터',
'Ron Weasley' : '론 위즐리',
'Hermione Granger' : '헤르미온느 그레인저',
};
print(dictionary);
Map<String, bool> isHarryPotter = {
'Harry Potter' : true,
'Ron Weasley' : true,
'Hermione Granger' : false,
};
isHarryPotter.addAll({
'Spiderman': false,
});
print(isHarryPotter);
// 키에 해당하는 value값 가져오기
print(isHarryPotter['Spiderman']);
isHarryPotter['Hulk'] = false;
print(isHarryPotter);
// 키를 통해 값 지우기
isHarryPotter.remove('Harry Potter');
// key,value 가져오기
print(isHarryPotter.keys);
print(isHarryPotter.values);
- Set (중복 X)
final Set<String> names = {
'현정','철수','영희'
};
names.add('제니');
names.remove('제니');
print(names.contains('철수')); //true
- If문
int number = 2;
if(number % 2 == 0) {
print('값이 짝수입니다.');
}else{
print('값이 홀수입니다.');
}
- switch문
int number = 3;
switch(number % 3) {
case 0:
print('나머지가 0입니다.');
break;
case 1:
print('나머지가 1입니다.');
break;
default:
print('나머지가 2입니다.');
break;
}
- for loop
int total = 0;
List<int> numbers = [1, 2, 3, 4, 5, 6];
for(int i =0; i< numbers.length; i++){
if(numbers[i] ==5) continue;
total += numbers[i];
}
print(total);
total = 0;
for(int number in numbers){
print(number);
total += number;
}
- while loop
int total = 0;
while(total <10){
total += 1;
if(total == 5){
break;
}
}
print(total); // 10
total = 0;
do{
total += 1;
} while(total < 10);
print(total); // 10
- enum
enum Status{
approved,
pending,
rejected,
}
void main() {
Status status = Status.pending;
if(status == Status.approved){
print('승인입니다.');
}else if(status == Status.pending){
print('대기입니다.');
}else{
print('거절입니다.');
}
}
- parameter / argument - 매개변수
positional parameter - 순서가 중요한 파라미터
optional parameter - 있어도 되고 없어도 되는 파라미터 []
void main() {
addNumbers(10);
addNumbers(20,90,100);
}
// 세개의 숫자 (x, y, z)를 더하고 짝수인지 홀수인지 알려주는 함수
addNumbers(int x, [int y = 20, int z = 30]) {
int sum = x + y + z;
print('x : $x');
print('y : $y');
print('z : $z');
if(sum % 2 == 0){
print('짝수입니다.');
} else {
print('홀수입니다.');
}
}
- named parameter - 이름이 있는 파라미터 (순서가 중요하지 않다.) default는 기본값 지정.
void main() {
addNumbers(y: 20,x: 10, z: 30);
}
addNumbers({
required int x,
required int y,
int z = 20,
}) {
int sum = x + y + z;
print('x : $x');
print('y : $y');
print('z : $z');
if(sum % 2 == 0){
print('짝수입니다.');
} else {
print('홀수입니다.');
}
}
- arrow function
void main() {
addNumbers(10, y:20);
}
int addNumbers(int x, {
required int y,
int z = 30,
}) => x + y + z; // 반환값
- typedef
void main() {
Operation operation = add;
int result = operation(10, 20, 30);
print(result);
operation = subtract;
int result2 = operation(10, 20, 30);
print(result2);
int result3 = calculate(30, 40, 50, add);
print(result3);
}
// signature
typedef Operation = int Function(int x, int y, int z);
int add(int x, int y, int z) => x + y + z;
int subtract(int x, int y, int z) => x - y - z;
int calculate(int x, int y, int z, Operation operation){
return operation(x, y, z);
}
'Flutter' 카테고리의 다른 글
[Flutter] row and column (0) | 2023.09.22 |
---|---|
[Flutter] Splash Screen (0) | 2023.09.22 |
[Dart] Dart 비동기 프로그래밍 (Async Programming) (0) | 2023.09.20 |
[Dart] Dart 함수형 프로그래밍 (Functional Programming) (0) | 2023.09.19 |
[Dart] Dart 객체지향 프로그래밍 (Object Oriented Programming) (0) | 2023.09.18 |