기본 변수 선언 방법 ( 타입과 함께 선언)
void main() {
var varible = 'anything'
String str = '주형'; // 이상하게 String만 앞에 대문자
int integer = 3;
double silsue = 2.344; // 실수
bool isTrue = true //True아니고 앞문자 소문자임
DateTime now = DateTime.now();
}
; 로 문장 끝나는거 꼭 표현해줘야함. C++의 향기가 물씬 난다.
그런데 var은 타입추론 물론 알아서 하지만,
변수 선언할 때 앞에다가 변수의 타입을 지정하면서 변수선언하는건 좋은듯.
문자열 안에 변수넣기. $ 인데, {} 생략이 가능한
print( '${name} ${age} ')
//는 아래와 같다
print('$name $age');
//하지만 문자안에 변수 넣는것은 변수만 사용할떄야 가능하다. 변수의 메소드를 써야하면 당연히 괄호 쳐줘야함
dynamic 변수
void main () {
dynamic name = '주형';
var name2= '어섬';
// 이 두 타입의 차이는 dynamic은 나중에 다른 타입으로 할당이 가능함
// var은 타입은 고정이기 떄문에, 후에 할당할 때에도 같은 타입 아니면 에러남
}
물음표! 느낌표! null, nullable, non-nullable!
String name = '있오'
String? age = '있을 수도 있고 없을 수도 있어'
//?를 타입단계에 넣으면서 nullable 로 표현이 가능하다.
//나중에 age= null 로 할당 가능.
//name은 non-nullable임.
print(age!) ;
// age가 null이 아니라는 것을 말해준다.
귀엽다!
? : "스트링인데.. 혹시 없을 수도(null일지도) 몰라.."
! : "야 나 있어!(null아니야!)"
Final, Const
final name = '주형'
=
final String name = '주형'
//final은 빌드 타임의 값을 몰라도 된다.
const name2 = '어섬'
=
const String name2 = '어섬'
=> var 명령을 생략해도 된다. const와 final은 알아서 타입체크를 해준다.
//const는 빌드 타임의 값은 절대로 알아야 한다.
이 두개는 var의 생략을 할 수 있게 해준다. 타입 설정이랑 변수 선언 키워드를 동시에 해줄 수 있다.
다만, 둘의 차이는 빌드 타임의 값을 몰라도 되는 것과 알아도 되는 것의 차이인데,
실제 앱을 만들 때는 어떻게 쓰게 될지는 모르겠다?
DateTime을 쓸때는, 코드가 코드가 실행될 때의 시간이 저장되는데 Final은 빌드할 때 이 DateTime의 값을 몰라도되지만,
const는 언제 빌드가 되고 빌드가 될때의 시간을 모르니까 에러가 걸릴 수 밖에 없다.
사칙연산
크게 어려울 것 없이 똑같음.
비교연산 똑같고.
&& ,
number ?? = 3.0;
//number가 null이면 3.0이란 값을 넣겠습니다.
신기하구만, null일때를 따로 if조건문 같은 거 안넣고 이렇게 표현하니까 훨씬 간단해지는 듯. 나중에 코드 짤때 많이 쓸 느낌인데
리스트
List <String> names = ['주형','어섬']
제너릭으로 스트링 넣어주어 String만 포함된 List 생성.
.length
.add
.remove
.indexOf
Map
Map<String,String> dict = { '주형': '어섬' }
addAll ( {} )
mapname['주횽'] = '지조'
추가됨. 딕셔너리랑 오브젝트 같은거지.
.remove
.keys
.values
Set
value값 없음.
Map이랑 다르게, "중복되는 값" 불가능 => 중복처리가 가능하다는 뜻이죠.
{'주형', '주형2', '어섬'} 이런 식으로 생김.
.add
.remove
.contains => 값이 set안에 있는지 없는지 ㅇㅇ
If문
javascript와 똑같이 생김.
switch문도 가능. case 그대로 쓰고, else의 경우는 default로 표현.
loop
이것도 똑같이 생김, for문~
while도~ do while은 오랜만에 보는 듯. 근데 대체로 안씀ㅋㅋ
continue => 현재 지금 진행 중인 loop만 넘어가서 다음으로 넘어갑시다~
Enum
Enum은 하드코딩으로 쓰다가 오타같은거 방지용으로,
어떤 조건같은 거 맞출 때 유용함.
approved같은거 if condition = "approved"
로 하드코딩하면 오타나도 못잡음. 그래서 enum은 거기에 쓰일 값들을 제한해주는 용도임.
리스트 같은걸로 굳이 할 필요없이, 코드가 바로보기 되게 유용할듯.
enum Status{
approved,
pending,
rejected,
}
if (status = Status.approved){
실행~
}
else if ( status = Status.pending){
~~
}
함수
Position Parameter
앞에 function 같은거 안써주네
그냥
addNumbers( int x, int y, double z){}
로 정의하면 끝이네.
Optional Parameter
표현을 ?가 아니라
* addNumbers( int x, [ int y, int z]). {}
로 사용가능하네요.
하지만 에러가 납니다. null일 수도 있는 값이기 때문입니다.
* 그렇다고 int? y , int? z 로 표현하면
함수실행부에서 y와 z에 대한 타입에러가 똑같이 납니다.
null일 수도 있는 y,z를 내가 어떻게 계산할지 모르겠으니 확실하게 해저라!!
라는뜻인데, 이럴때는 그냥 int y, int z를 선언만 하지말고, 할당도 해주어 변수선언을 해주십시다.
*결론 => addNumbers( int x, [ int y = 2342, int =8]). {}
이렇게 값을 초기화해줍시다.
Named Parameter
파라미터에 순서 상관없이 파라미터 넣는 법 이름 정해줘서 넣으면 된다
* addNumbers( {required int x, required int y, int z= 30){}
이런식으로 함수 선언해주고
* addNumbers( y: 20, x:10) 이렇게 사용한다.
(z는 optional로 처리했기 때문에 안적었다. 괄호 안이 map형태로 되어있어서 순서가 중요하지 않음을 이용한 듯하다)
** positional과 named 파라미터 두개 혼용가능하다.ㅇㅇㅇ순서맞춰서 쓸부분만 positional로 하면댐
Void는 뭐냐?
리턴타입을 이야기합니다.
아 그렇지 함수 앞에 리턴값을 타입을 정해줘야지 ㅇㅇㅇ
void는 그 함수에 리턴할 게 없다고 말한 것임.
앞에다가 반환할 타입 적으면 댐ㅇㅇ.
아무것도 안적으면 void로 알아서 생각하는 것임.
Arrow 함수까지 지원함 ㅋㅋ
int ArrowNum(int x, {required int z, required int y} ) => x +y +z;
라고 쓸 수 있음ㅋㅋ
Typedef 재밌네요
operation 함수 사용하기
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;
// 어라 add랑 subtract랑 파라미터가 똑같은데 이 함수들을 파라미터로 사용해서 리턴값 나오게 만들자.
int calculate (int x, int y, int z, Operation operation){
return operation(x,y,z)
}
=>
calculate(2,3,4,add); // return 9
calculate(2,3,4,subtract) //return -5
많이 쓸려나 모르겠네
'개발 | > Flutter' 카테고리의 다른 글
[Flutter] Widget들 (추후 총정리 필요) (0) | 2022.11.02 |
---|---|
[Flutter] 오류 몇 개 & stful widget life cycle (0) | 2022.10.19 |
[Flutter] 맨처음 시작 & 디자인입히는법 살짝 (0) | 2022.10.10 |
[Flutter] 자료형에 대한 다양한 메소드 & 비동기 (Future & stream) (0) | 2022.10.05 |
[Flutter] Dart기본- 객지프(Obejct - Orieted - Programming) (1) | 2022.10.03 |