코딩

[다트][인프런][코드팩토리] 다트 기초 문법 텍스트 정리

블루베리QA 2022. 8. 31. 21:41

😉준비물

인프런 코드팩토리님의 강의 : https://www.inflearn.com/users/@codefactory

 

코드팩토리님의 소개 - 인프런 | 온라인 강의 플랫폼

인프런 코드팩토리님의 소개 페이지 입니다. - 코드팩토리님 소개 | 인프런...

www.inflearn.com

 

다트 패드 : https://dartpad.dev/ 

 

DartPad

 

dartpad.dev

 


🤭변수 선언

void main() { }

모든 코드는 위 메인 함수안에서 실행 시킴

print('Hello Code Factory');

프린트 해보기

//(1)
var name = '코드팩토리';

print(name);

var name2 = '레드벨벳';

print(name2);

//(2)

var name = '플러터 프로그래밍'

print(name);

(1) var로 함수 선언이 가능합니다.

(2) 같은 이름의 함수를 2번 이상 선언하면 오류가 발생합니다.

why? 뭐가 진짜 값인지 알 수 없기 때문에

int number1 = 1

print(number1)

int number2 = -5

print (number2)

 int를 이용해서 integer(정수) 선언 가능

double number1 = 2.5

print(number1)

double number2 = 3.5

print(number2)

double을 이용해서 실수 선언 가능

bool isTrue = true;
bool isFalse = false;

pritn(isTrue)
print(isFalse)

bool(Boolean)을 이용해서 참,거짓 값을 선언 가능

String name = '레드벨벳';
String name2 = '코드팩토리';

print(name);
print(name2);

String을 이용해서 문자열 선언 가능

 

Q. var을 쓰면 되는데 String, int를 왜 씀?

A. 코드의 가독성을 높이고 대량의 코드에서 변수를 제대로 정리하기 위해서임

String name = '레드벨벳'
String name2 = '슬기'

print(name + name2);
//레드벨벳슬기

print(name + ' ' + name2);
//레드벨벳 슬기

print('${name} ${name2}');
//레드벨벳 슬기

print('$name.runtimeType $name2');
//레드벨벳.runtimeType 슬기

스트링 출력 시,

Str + Str = StrStr

${Str} ${Str} = Str Str

로 출력된다.

 

var name1 = '우주소녀'
dynamic name2 = '루다'

name1 = 1 //(1)불가능
name2 = 1 //(2)가능

var는 한번 String, Integer로 결정되면 바뀌지 않는다.

dynamic은 var과 같지만 이 후에 타입 변경이 가능하다.

 

String? name1 = '우주소녀';

name1 = null; ( nullable )

String! name2 = '루다';

name2 = null; ( non-nullable )

?(물음표)를 붙여주면 null 값으로 변환이 가능해지고 ( nullable )

!(느낌표)를 붙여주면 null 값으로 변환이 불가능해진다 ( non-nullable )

 

final String name = '우주소녀'

const Stirng name = '루다'

// var은 생략 가능

final과 const 모두 해당 변수의 값이 변하지 않도록 Fix 시켜준다. 

 

final/const var name = final/const name 으로 생략해서 사용할 수 있다.

 

Q. final과 const의 차이는 뭔가?

final은 buildtime의 값을 알지 못해도 사용할 수 있다.

( 깊게 이해하려고 하지 않았다. 언젠가 다시 만날 거라고 생각함 ) 


🧐오퍼레이터(연산자)

int number = 2;

print(number) // 2가 나온다.

print(number + 1 )

print(number + 2 )

print(number) // 2가 나온다.

일반적으로 변수 선언한 값을 print할 때 더하기 빼기를 해준다고 해서 변수값이 변환되지는 않는다.

 

int number = 2;

number ++;

print(number) // 3이 출력됨

하지만 '++', '--' 같은 오퍼레이터(연산자)를 사용하면 변수값을 재저장 시킬 수 있다.

 

dobule numver = 4.0;

number += 1;

print(number) // 5

number -= 1;

print(number) // 4

number *= 2;

print(number) // 8

오퍼레이터(연산자)를 바뀌가며 '재저장'이 가능하다.

 

double? number = 4.0;

print(number); // 4.0

number = 2.0;

print(number); // 2.0

number = null;

print(number); // number

number ?? = 3.0; // number가 만약에 null이라면 3.0 으로 바꿔라!

print(number); // 3.0

물음표(null-able)을 이용해서 'null'일 경우 값 지정하는 오퍼레이터를 사용 가능하다.

 

int number = 1;
int number = 2;

print(number1 > number2); // false
print(number1 < number2); // true
print(number1 >= number2); // false
print(number1 <= number2); // true
print(number1 == number2); // false
print(number1 != number2); // true

변수값 크기 비교

int number 1 = 1;

print(number1 is int); // true
print(number1 is String); // false

print(number1 is! int); // false
print(number1 is! String); // true

변수 타입 비교

bool result 12 > 10 && 1 > 0;

print(result);

bool result2 = 12 > 10 && 0 > 1;

print(result);

bool result3 = 12 > 10 || 1 > 0;

print(result3);

bool result4 = 12 > 10 || 0 > 1;

print(result4);

bool result5 = 12 < 10 || 0>1;

%%(and) 와 ||(or)로 공통 조건

 


😎리스트

 

List<String> blackPink = ['제니','로제','지수','리사'];
List<int> numbers = [1,2,3,4,5];

리스트 앞에 뾰족괄호를 통해서 타입을 설정 가능

print(blackPink[0],blackPink[1]) // 제니 로제

인덱스는 0 부터 할당됨

print(blackPink.length); // 4

길이를 알려주는 .length

blackPink.add('루다')

값을 추가해주는 .add

blackPink.remove('제니');

값을 지워주는 .remove

print(blackPink.indexOf('루다')); // 4

값의 위치를 알려주는 .indexOf

 

Map<String, String> dictionary = { 'Harry Potter' : '해리포터', 'king' : '킹', 'queen' :'퀸' };

print (dictionary);

Map<String, bool> is character = { ... };

Map 을 이용해서 딕셔너리 변수 지정 가능

 

character.addAll({a : c, b : d});

character[a] = b;

character.remove('a'); // 키와 값이 동시에 지워짐

print(character.keys); // 키만 가져오기
print(character.values); // 밸류만 가져오기

추가, 변경, 키값만 출력, 밸류값만 출력이 가능

 

final Set<String> names = {
'a',
'b',
'c',
'd'
};

names.add('e') // e가 추가됨
names.remove('d') // d가 삭제됨
print(names.contains('f')) // false (존재여부)

Set은 리스트처럼 하나의 값만 저장한다.

하지만, Set에는 중복값을 자동으로 삭제를 해준다.

 


🫠조건문,반복문

int number = 3;
if(number == 3){
print('a');
}else if(number == 2){
print('b');
}else{
print('c');
}

타 언어의 if 문과 다를것 없다.

 

switch(number % 3){
case 0:
print('나머지가 0입니다.');
break;

case 1:
print('나머지가 1입니다.');
break;

case 2:
print('나머지가 2입니다.');
break;

switch문을 이용해서 값이 나왔을 때 각각 값에 따른 출력을 지정할 수 있다.

 

// loof

for (int i = 0; i < 10; i++) {
print('hi')
}

for ( 변수설정, 조건설정, 증감설정 ) { 출력 } 를 이용해서 반복문을 설정

 

List<int> numbers = [1,2,3,4,5,6];

for (int number in numbers){
 print(number); // 1 2 3 4 5 6
}

for ( 타입 변수 in 리스트 ) 를 이용해서 리스트 속 값들을 반복 시킬 수 있다.

 

int total = 0;

while(total < 10){

total += 1;

}

print(total);

while (조건) 을 이용해서 반복 가능

 

do { total += 1;
} while (total < 10)

print(total);
}

do 를 이용하면 특정 동작을 먼저 실행할 수 있지만, 아무도 쓰는걸 본적이 없다고 한다.

 

while ( total < 10) {
total += 1;

if (total == 4){
continue;
}

print(total); // 1,2,3,5

if (total == 5){
break;
}

break 문을 사용하면 반복문이 종료,

continue문을 사용하면 반복문이 한 번 생략 된다.


🤥이넘, 함수,파라미터

enum Status{
approved,
pending,
rejected,
}

Status status = Status.pending;

if(status == Status.approved){
print('승인입니다.');
}else if(status == Status.pending){
print('승인입니다.');
}else if(status == Status.rejected){
print('승인입니다.');

enum을 사용해서 몇가지 타입이 있다는 것을 알리고, 픽스해 둘 수 있다.

 

// 이 함수는 이런 함수 입니다.
addNumbers(){
	print('addNumbers 실행')
}


addNumbers(); // addNumbers 실행

함수명(매개변수){출력}

함수를 지정할 수 있다.

*나와 다른 사람을 위해서 위에 주석 설명을 남겨서 어떤 함수인지 항상 남겨줄 것*

 

addNumbers(3, 5, 7); // 실행


//세 개의 숫자를 더하고 짝수인지 홀수인지 알려주는 함수

addNumbers(int x, int y, int z) // 괄호 안에 들어가는게 parameter

{
int sum = x + y + z;

print('x :$x');
print('y :$y');
print('z :$z');

if (sum % 2 ==0) {
print('짝수입니다.');
} else {
print('홀수입니다.');
}

함수의 꽃인 파라미터는 함수 선언 뒤 괄호에 들어간다.

현재 위 코드에 들어있는 파라미터는 'Positional Parameter'로 순서가 중요한 파라미터다.

( 순서대로 넣어줘야 하는 파라미터이기 때문 )

 

addNumbers(10); // 실행
addNumbers(20, 30); // 실행


addNumbers(int x, [int y, int z]) // 대괄호를 넣으면 선택가능 파라미터가된다.
int sum = x + y + z

addNumbers(int x, [int y = 30, int z = 20]) // 선택가능 파라미터는, 기본값을 설정해둘 수 있다.
int sum = x + y + z

'optional parameter' 넣지 않아도 되는 parameter값을 넣어줄 수 있다.

addNumbers( x : 10, y : 20, z : 35); // 실행
addNumbers( z : 10, x : 25, y : 32); // 변수의 순서가 바뀌어도 문제x


addNumbers(
required int x,
required int y,
required int z,  ) // 이름이 있는 파라미터를 설정
int sum = x + y + z

addNumbers(
required int x,
required int y,
int z,  ) // required를 지우면 'optional named parameter'가 된다.
int sum = x + y + z

'named parameter'를 이용해서 순서가 정해진 값을 넣어줄 수 있다.

void 함수(){} // return 값이 없다.

int 함수(){} // int값을 return 해야 한다.

'void'와 'int'를 이용해서 함수의 return 값을 지정 할 수 있다.

 

int addNumbers(x,y,z)
=> x+y+z; // 애로우 함수 바로 뒤에 오는 값을 반환한다.

애로우 펑션을 이용해서 간소화 하는 것이 가능하다.

//signature (1)
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

//계산 (2)
int calculate ( int x, int y, int z, Operation operation ) => operation (x - y - z)


void main(){
Operation operation = add;

int result = opration(10, 20, 30);

print(result); // 60

operation = subtract;

int result2 = operation(10,20,30)

print(result2);// -40 (3)

int result3 = calculate(10,20,30,add)

print(result3); // 120


}

typedef와 시그니쳐에 대한 강의는 별도 추가 강의, 추가 정리 예정

 


간단히 강의 내용을 텍스트로 정리해봤습니다. 

 

수정 필요한 부분은 언제든 댓글로 남겨주세요 :)

 

혹시 집에 물 떨어졌으면 나를 눌러라 냥!