Dart를 알고보자

오늘도 알고보자·2022년 2월 7일
0

Flutter는 다트 언어로만 진행된다.

basic

int timesTwo(int x) {
 return x * 2;
}
이건 int로 들어갔다가 int로 나온다
int x의 값을 인자로 전달받아
 x*2 한 값을 리턴한다.
int timesFour(int x) => timesTwo(timesTwo(x));
return=> 으로 바꿀수있다.
예를 들어 int timesTwo(int x) {
return x * 2;
} 이것을
int timesTwo(int x) => x * 2;
로 바꿀수있다.

Dart가 좋은게 funtion 자체를 funtion 안에 넣어줄수있다.

int runTwice(int x, Function f) {
 x = f(x);
 x = f(x);
 return x;
}

main()
print("2 x 2 x 2 is ${runTwice(2, timesTwo)}");

이렇게 해주면 8이 나온다.

timesTwo는 x * 2이고

x는 2 이당 2*2 =4 인데

다시한번 4에 x*2를 해주어서 8이라고나온다.

Control flow

bool 은 두가지 값만 들어갈수있다.

True or false

bool isEven(int x) {
  if (x % 2 == 0) {
    return true;
  } else {
    return false;
  }
}

int x 정수가 짝수인가 홀수인가 물어보는 내용
x % 2는 이걸 계산하고 나머지 값이
== 은 비교하는것이다
if (x % 2 == 0) 이걸 해석하면 만약에 x를 2로 나눈 나머지 값이 0과 같으면
return true; true라고 하고 } else { 아니라면 return false; False라고 한다.

For문

List<int> getEvenNumbers(Iterable<int> numbers) {
  var evenNumbers = <int>[];
  for (var i in numbers) {
    if (isEven(i)) evenNumbers.add(i);
  }
  return evenNumbers;
}

for (var i in numbers) numbers를 i에서 하나씩 받아와서 이 i를 if 문 코드에 던져준다.
만약 numbers 안에 1,2,3,4,5 가있다면
if (isEven(i)) evenNumbers.add(i); } 여기까지 1,2,3,4,5가 조건이 돌아가고,
만약에 i값이 짝수라면 var evenNumbers = []; 여기에 넣어준다. 홀수면 그냥 넘어간다.
return evenNumbers; 해당 코드가 발생한다.
그리고 그렇게 생선된 eveenNumbers를 다시 리턴을 해준다.

Class

class Car{
 int seats;
 String color;
 
 Car(int sts, String clr){
   this.seats = sts;
   this.color = clr;
  }
} //이 부분을 클래스라고 한다.
main(){
 Car newCar = Car(4, 'red');
 
 print('seat: ${newCar.seats}');

오브젝트 object = 인스턴스 insteance이다. 여기서는 생성된차 newCar를 오브젝트 라고한다.
Car(int sts, String clr){ this.seats = sts; this.color = clr; }
주문서를 받는 이부분은 construct 라고 한다.
이 주문서를 보고 고객들은
main(){ Car newCar = Car(4, 'red'); print('seat: ${newCar.seats}');
이렇게 주문을한다. (인스턴스)

Print할때 함수로 만들어주는법
print('seat: ${newCar.seats}');
이부분을
printVars(){ print('seat : $seats'); }
로 바꿀수 있다.

Constructor 옵션화

Mouse(var na, [var ag]){ this.name = na; this.age = ag; }
저렇게 중괄호로 묶어주면 옵션화가 설정이되서 main에서 출력시 빠져도 출력이 된다.(넣어도되고 안넣어도되고)
main() { Mouse newMouse1 = Mouse('Picachu'); newMouse1.printVars();
이렇게 나이 부분이 빠져있어도 컴파일러가 실행된다.

기본값으로 Construtor 옵션화

Mouse(var na, [var ag = 13]){ this.name = na; this.age = ag; }
처럼[ var ag = 13] 으로 하면 기본값으로 나오며 객체에서 빠져있어도 기본값이 실행된다.

위의 Main함수가 실행되면
name : Picachu, age : 20
이렇게 출력된다.
혹시나 construct의 문장에서
Mouse(var na, var ag){ this.name = na; this.age = ag; }
어떤것 부터 선언했는지 까먹는 경우가 많다

Main함수에서 차례대로 입력하지 않으면 컴파일러가 돌아가지않는다.
이럴때는
Mouse({var na, var ag}){ this.name = na; this.age = ag; }

이렇게 대괄호를 추가해주고
main() { Mouse newMouse1 = Mouse(na: 'Picachu',ag:20);
Main 함수에 각각 변수를 써주고 : 를 추가하면 알아서 컴파일러가 찾아간다.

0개의 댓글