기본기
참조 : https://dartpad.dev/?
변수
변수의 선언
var name = '';
이렇게 선언한다.
변수는 재할당 가능하고
순서대로 실행된다.
정수
int number1 = 10;
이런 식으로 정수를 선언할 수 있음.
int number1 = 2;
int number2 = 6;
print(number1 + number2);
print(number1 - number2);
print(number1 / number2);
print(number1 * number2);
실수
double
그냥 쓰면 됨. (기본적인 프로그래밍 언어랑 비슷함.)
Boolean
String
String name = '레벨';
String name2 = '딴거';
var name3 = '우후';
var number =20;
print(name3.runtimeType); // 이런 식으로 쓰면 알아서 String으로 지정해준 것을 알 수 있다.
형을 정해주는 것이 좋다. 나중가면
Map<String, Map<int, List<double>>> testType
이런 식으로 확인
백틱 문자 사용 같음
dynamic 타입
dynamic name = '코드팩토리';
dynamic number = 1;
var name2 = '우하하하';
print(name.runtimeType);
print(name2.runtimeType);
name2 = 5 // 에러!
var 타입은 문자열 타입 에서 정수 타입으로 재할당 불가
dynamic은 형을 뛰어넘어 재할당 가능
nullable
// nullable - null 이 될 수 있다.
// non-nullable - null 이 될 수 없다.
// null - 아무런 값도 있지 않다.
String name = '코드팩토리';
print(name);
String? name2 = '블랙핑크';
name2 = null;
print(name2);
? 를 넣으면 널이 들어갈 수 있음
name! 현재 이 값은 null 이 아니다라는 뜻임.
final
final String name = '코드팩토리';
print(name);
name = '블랙핑크'; // 바꿀 수 없음!
const String name2 = '요요';
print(name2);
name2 = '코드팩토리';// 이렇게 바꿀 수 없음.
final, const에서는 값을 재할당할 수 없다. type을 선언 안해줘도 된다.(왜냐면 한번 할당하면 안바뀌니까 그 때 타입도 저장 되는 것임)
DateTime now = DateTime.now();
print(now) //현재 시간이 찍히게 됨.
여기서 now는 코드가 실행되는 순간임 그러면 버튼을 누르는 순간과는 약간 달라질 수 있음.
final 을 붙이면 에러가 안남 const 는 에러가 남.
build time 에 대한 이해가 필요함.
Run 할 때, Build라는 과정이 필요함
작성하는 순간의 코드의 값을 알고 있어야 함. 그러므로 const는 사용하지 못한다.
const는 빌드타임의 값도 알고 있어야 한다. final은 빌드타임과는 상관이 없다.
연산자
+-/*
%
++
--
+=
다 알고 있는 내용
?? 의 사용
double? number = 4.0;
number = 2.0;
print(number);
number = null;
number ??= 3.0; // number 가 null 이면 오른쪽 값으로 바꿔라.
비교연산자
type 연산자
number1 is int // int면 true
number1 is String // String 이면 true
number1 !is int // 반대로 나옴
논리연산자.
걍 똑같음
List
List<String> blackPink = ['1', '2', '3'];
List<int> numbers = [1,2,3,4,5,6];
// index 순서, 0부터 시작
print(blackPink[0]);
print(blackPink.length); // 실제 길이가 나옴. 3
blackPink.add('코드팩토리');
blackPink.remove('코드팩토리'); // 원하는 걸 지울 수 있음.
print(blackPink.indexOf('1')); // 몇번째인지 알려줌
Map
// Map
// Key/ Value
Map <String, String> dictionary = {
'HarryPorter' : '해리포터',
'Ron Weasley' : '론 위즐리',
'Hermione Gra`nger' : '헤르미온느',
}`
print(dictionary);
Map<String, bool> isHarryPotter = {
'HarryPorter' : true;
'Ron Weasley' : true;
'IronMan' : false;
}
print(isHarryPotter);
isHarryPotter.addAll({
'SpiderMan' : false,
})
print(isHarryPotter['ironman']);
isHarryPotter['Hulk'] = false;
isHarryPotter['Spiderman'] = true;
isHarryPotter.remove('IronMan');
print(isHarryPotter.keys)
print(isHarryPotter.values)
아무튼 어떻게 넣을 수 있고, 조작할 수 있고를 설명함.
Set
Set은 Map 이랑 비슷함
그러나 중복이 안됨.
final Set<String> names = {
'Code Factory',
'Flutter',
'Black Pink',
};
print(names);
names.add('Jenny');
print(names);
names.remove('Jenny');
print(names);
print(names.contains('Flutter'));
if문
넘어감
Switch 문
넘어감
for, while, 등등
넘어감
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('거절합니다.');
}
}
함수
자 이 문서 안에 가장 어려운 개념이다.
optional parameter - 있어도 되고 없어도 되는 파라미터
addNumbers(int x, [int y = 20, int z = 30]){
int sum = x + y + z;
if(sum % 2 == 0 ){
print('짝수입니다.');
} else {
print('홀수입니다.');
}
}
위의 y, z는 있어도 되고 없어도 된다. optional parameter 는 기본 값을 넣어줘야만한다.
addNumbers(10, 10, 10) 하면 받고 addNumbers(10) 이렇게하면 20, 30 으로 입력 됨
named parameter - 이름이 있는 파라미터 (순서가 중요하지 않다.)
addNumbers({
required int x,
required int y,
required int z
}){
int sum = x + y + z;
if(sum % 2 == 0 ){
print('짝수입니다.');
} else {
print('홀수입니다.');
}
}
이러면 addNumbers(y: 20, x:10, z: 30);
이런 식으로 사용할 수 있음!
addNumbers({
required int x,
required int y,
int z = 30,
}){
int sum = x + y + z;
if(sum % 2 == 0 ){
print('짝수입니다.');
} else {
print('홀수입니다.');
}
}
위와 같이 하면 z는 넣어도 되고 안넣어도 되는 optional parameter 가 된다.
void
반환하는 타입을 넣어주는 곳임. 반환해주고 싶은 타입이 int면 함수 앞에 int를 넣어주면 됨.
parameter 조합
addNumbers(
int x,
{
required int y,
int z = 30,
}){
이런식으로 쓰면 position parameter 쓰고,
그다음, named parameter 그리고 optional parameter임.
arrow 함수
js와 동일
typedef
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;
void main() {
Operation operation = add;
int result = operation(10, 20, 30);
print(result);
operation = subtract;
int result2 = operation(10, 20, 30);
print (result2);
}
위와 같이 변수의 조합을 가지고 해당 함수를 넣어줄 수 있음.
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);
}
void main() {
int result3 = calculate(30, 40, 50, add);
print(result3);// add가 실행되어 보여짐
}