728x90
void main(){
// variable
var name = '코드팩토리';
print(name);
var name2 = '소녀시대';
print(name2);
name = '프로그래밍';
print(name);
// var name = '' 변수 선언은 두번 할 수 없다.
}
void main(){
// 정수
// integer
int number1 = 10;
print(number1);
int number2 = 20;
print(number2);
print(number1 + number2);
print(number1 - number2);
print(number1 * number2);
print(number1 / number2);
}
void main() {
// 실수
// double
double number1 = 2.5;
double number2 = 0.5;
print(number1 + number2);
print(number1 - number2);
print(number1 * number2);
print(number1 / number2);
}
void main() {
// 맞다/ 틀리다.
// Boolean
bool isTrue = true;
bool isFalse = false;
print(isTrue);
print(isFalse);
}
void main() {
// 글자 타입
// String
String name = "소녀시대";
String name2 = '하하';
print(name);
print(name2);
// var String
var name3 = '블랙핑크';
var number = 20;
print(name3.runtimeType);
}
void main() {
// 글자 타입
// String
String name = "소녀시대";
String name2 = '하하';
print(name + ' ' + name2);
print('${name}');
}
void main() {
// dynamic : 어떤 타입을 넣을 수 있다.
dynamic name = '소녀시대';
print(name);
dynamic number = 1;
print(number);
var name2 = '블랙핑크';
print(name2);
// var타입은 한번 선언하면 다른 타입으로 변경이 불가능
// dynamic은 계속 바꿀 수 있다.
}
void main() {
// nullable - null이 될 수 있다.
// non-nullable - null이 될 수 없다.
// null - 아무런 값도 있지 않다.
String name = '소녀시대';
print(name!);
// ! null 이 들어갈 수 없다.
String? name2 = '블랙 핑크';
//데이터 타입 뒤에 ?을 붙이면 null도 허용
name2 = null;
print(name2);
}
void main() {
final String name = '소녀시대';
// final을 선언하면 값을 변경할 수 없다.
// final name = '소녀시대';
print(name);
const String name2 = '블랙핑크';
// const도 변경할 수 없다.
/// const name2 = '블랙핑크';
print(name2);
// final, const를 사용하면 var 기능을 하기에 생략도 가능
}
void main() {
DateTime now = DateTime.now();
print(now);
DateTime now2 = DateTime.now();
print(now2);
// const는 빌드 타입에 값을 알아야한다.
// final은 빋드 타입을 몰라도 상관없다.
}
void main() {
int number = 2;
print(number % 2);
print(number % 3);
number++;
print(number);
number--;
print(number);
}
void main() {
double number = 4.0;
number = number + 1;
number += 1;
print(number);
}
void main() {
//null
double? number = 4.0;
number = null;
number ??= 3.0;
// 만약에 number값이 null이면 오른쪽 값을 출력해라
print(number);
}
void main() {
int number = 1;
int number2 = 2;
print(number > number2);
print(number < number2);
print(number >= number2);
print(number <= number2);
print(number == number2);
print(number != number2);
}
void main() {
int number = 1;
print(number is int);
print(number is! int);
}
void main() {
// && - and 조건
// || - or 조건
bool result = 12 > 10 && 1 > 0 && 3 > 0;
print(result);
bool result2 = 12 > 10 && 0 > 1;
print(result2);
bool result3 = 12 > 10 || 1 > 0;
print(result3);
bool result4 = 12 > 10 || 0 > 1;
print(result4);
}
void main() {
// List
// 리스트
List<String> blackPink = ['제니', '지수', '로제', '리사'];
List<int> numbers= [1,2,3,4,5];
print(blackPink);
print(numbers);
print(blackPink.length);
blackPink.add('윤아');
blackPink.remove('지수');
print(blackPink);
print(blackPink.indexOf('로제'));
//index
//순서
//0 부터 시작
print(blackPink[3]);
}
void main() {
// 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,
'Iroman' : false
};
print(isHarryPotter);
isHarryPotter.addAll({
'Spiderman' : false,
});
print(isHarryPotter);
print(isHarryPotter['Iroman']);
isHarryPotter['Hulk'] = false;
print(isHarryPotter);
isHarryPotter['Spiderman'] = true;
print(isHarryPotter);
isHarryPotter.remove('Harry Potter');
print(isHarryPotter);
print(isHarryPotter.keys);
print(isHarryPotter.values);
}
list와, set에 차이는 set은 중복을 자동으로 처리해준다.
void main() {
//set
final Set<String> names = {
'code Factory',
'Flutter',
'Balck Pink',
'Flutter',
};
print(names);
names.add('Jenny');
print(names);
names.remove('Flutter');
print(names);
print(names.contains('Jenny'));
}
void main() {
// if 문
int number = 3;
if(number % 2 == 0){
print('값이 짝수 입니다.');
} else{
print('값이 홀수 입니다.');
};
}
void main() {
// if 문
int number = 3;
if(number % 3 == 0){
print('나머지가 0입니다.');
}else if(number % 3 == 1){
print('나머지가 1입니다.');
} else{
print('나머지가 2입니다.');
};
}
void main() {
// switch 문
int number = 3;
switch(number % 3){
case 0:
print('나머지가 0입니다.');
break;
case 1:
print('나머지가 1입니다.');
break;
default:
print('나머지가 2입니다.');
break;
};
}
void main() {
// for loop
int total = 0;
int i;
List<int> numbers = [1,2,3,4,5,6];
for(i = 0; i < numbers.length; i++){
total = total + numbers[i];
}
print(total);
total = 0;
for(int number in numbers){
total += number;
};
print(total);
}
void main() {
// while loop
int total = 0;
while(total < 10){
total += 1;
};
print(total);
total = 0;
do {
total +=1;
} while(total < 10);
print(total);
}
void main() {
// while loop
int total = 0;
while(total < 10){
total += 1;
if(total == 5){
break;
}
};
print(total);
}
void main() {
//continue
for(int i = 0; i< 10; i++){
if(i == 5){
continue;
// 현재 룹만 Skip
}
print(i);
};
}
enum Status{
approved, //승인
pending, //대기
regected, // 거절
} // 정확히 몇가지 타입만 있을 때 사용가능하다.
void main() {
Status status = Status.approved;
if(status == Status.approved){
print('승인입니다.');
} else if(status == Status.pending){
print('대기입니다.');
} else {
print('거절입니다.');
}
}
// 함수는 반복되는 코드를 한번만 사용하고 재활용하는 기능
void main() {
addNumbers();
}
// 세개의 숫자 (x, y, z)를 더하고 홀수인지 알려주는 함수
addNumbers(){
int x = 10;
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('홀수입니다.');
}
}
// 함수는 반복되는 코드를 한번만 사용하고 재활용하는 기능
// void - 공허
// String, int, boolean 등 return을 사용하는 메소드와
// void를 사용해 return이 없는 메소드로 나뉘어진다.
// void 타입을 사용하지 않을 경우 반드시 return 값을 반환해야 한다.
// return이란? : 메소들 수행하면 String 타입으로 반환한다 했으니 반드시 메소드에 String 타입의 값을 반환해야 한다.
// void 타입은 아무것도 반화하지 않는다는 말이기 때문에 뭔가를 반환할 필요가 없다.
void main() {
int result = addNumbers(10, y: 20);
addNumbers(10, y: 20, z: 70);
print(result);
}
// 세개의 숫자 (x, y, z)를 더하고 홀수인지 알려주는 함수
// parameter / argument - 매개변수
// positional parameter - 순서가 중요한 파라미터
// optional parameter - 있어도 되고 없어도 되는 파라미터
// named parameter - 이름이 있는 파라미터 (순서가 중요하지 않다.)
// arrow function - 화살표 함수
int addNumbers(int x, { required int y, int z = 30}) {
int sum = x + y + z;
print('x : $x');
print('y : $y');
print('z : $z');
if (sum % 2 == 0) {
print('짝수입니다.');
} else {
print('홀수입니다.');
}
return sum;
}
// arrow function - 화살표 함수
int addNumbers(int x, { required int y, int z = 30}) => x + y + z;
typedef를 사용하면 함수의 타입을 명확하게 표현할 수 있어 가독성이 높아지고, 특정 타입을 가진 함수를 많이 사용하는 경우 간결한 코드를 작성할 수 있습니다.
list 혹은 map, set 등의 타입으로 함수의 반환값을 정하면 그 구조가 복잡해질 수 있습니다. 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(10, 20, 30, add);
print(result3);
int result4 = calculate(40, 50, 60, subtract);
print(result4);
}
// 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);
}
728x90
'Flutter(플러터)' 카테고리의 다른 글
| Dart #4 비동기 프로그래밍(Async Programming) (0) | 2023.09.18 |
|---|---|
| Dart #3 함수형 프로그래밍(Functional Programming) (1) | 2023.09.18 |
| Dart #2 객체지향 프로그래밍(Object Oriented Programming) (0) | 2023.09.18 |