250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 안드로이드
- 앱
- data
- android
- ScrollView
- Button
- 계측
- CustomScrollView
- scroll
- appbar
- Flutter
- activity
- 테스트
- Coroutines
- intent
- textview
- DART
- Kotlin
- Navigation
- 앱바
- binding
- textfield
- viewmodel
- LifeCycle
- tabbar
- drift
- TEST
- Dialog
- Compose
- livedata
Archives
- Today
- Total
Study Record
[Dart] Dart 기본 본문
728x90
✍ 프로그램 설치 없이 Dart 코드 실행하는 사이트
✍ 기본 문법
※ Dart 는 세미클론을 붙여야 한다.
1. 변수 선언 방법
var number = "변수 선언";
dynamic nameName = "코드 팩토리";
nameName = 2;
// 정수 타입
int number1 = 2;
int number2 = 4;
// 실수 타입
double number3 = 2.5;
// Boolean 타입
bool isTrue = true;
bool isFalse = false;
// 글자 타입
String name = "빠라라람";
print(name3.runtimeType);
변수를 선언할 때 'var' 키워드로 선언하면 오른쪽에 위치한 값의 데이터에 따라 데이터 타입이 자동으로 결정된다.
dynamic 키워드는 최초 선언 이후 다른 데이터 타입으로 변경해도 된다. 반면 var 키워드는 최초 선언 시 결정된 데이터 타입을 중간에 변경할 수 없다.
+ 문자 작성 시 변수 추가 방법 ($ 키워드)
String name = "사랑";
String name2 = "연애";
// 사랑 연애
print("${name} $name2");
2. null vs non-nullable
// non-nullable - null 이 불가능하다.
String name = "코드팩토리";
// nullable - null 이 가능하다.
String? name2;
print(name2);
print(name);
3. 여러가지 키워드
! 변수 뒤에 붙어 사용되며 절대 null 이 아니라는 의미를 가진다.
키워드 | 설명 |
! | 변수 뒤에 붙어 사용되며 절대 null 이 아니라는 의미를 가진다. |
final | 변수 선언 시 앞에 붙어 사용되며 이후 값을 변경할 수 없다. (var 사용 불가능) * 빌드 타임 시 값을 모르고 있어도 된다. |
const | 변수 선언 시 앞에 붙어 사용되며 이후 값을 변경할 수 없다. (var 사용 불가능) * 빌드 타임 시 값을 알고 있어야 한다. |
* 빌드 과정 : 작성된 코드가 컴퓨터로 이해할 수 있는 언어로 바뀌는 과정
<예시>
String name = "이름";
print(name!);
// final, const 키워드 모두 테이터 타입을 생량할 수 있다.
final String finalName = "final 변수 선언";
// final finalName = "final 변수 선언";
const String constName = "const 변수 선언";
// const constName = "const 변수 선언";
/* DateTime.now() 는 빌드하기 전 실행되지 않고 순차적으로 코드를 실행하는 도중 실행된다.
* 따라서 빌드 타임 전 값을 미리 알아야 하는 const 키워드를 사용할 수 없다.
*/
final DateTime now = DateTime.now();
// const DateTime now2 = DateTime.now();
4. operator (+, -, *, /, %, ??=, <, >, <=, >=, &&, ||, is, is!)
int number2 = 3;
double? doubleNumber = 5.0;
// number2 = number2 + 1;
number2 ++;
number2 += 1;
// number2 = number2 - 1;
number2 --;
number2 -= 1;
number2 *= 2;
// 나누기(/) 연산과 나머지(%) 연산의 경우 int 형식으로 하면 에러가 난다.
doubleNumber /= 2;
doubleNumber %= 2;
// ??= 연산은 변수 값이 null일 경우 오른쪽 값으로 변경한다.
doubleNumber = null;
doubleNumber ??= 3.0;
print(doubleNumber); // 3.0
/* 비교 연산자 */
int num1 = 2;
int num2 = 2;
print(num1 < num2); // false
print(num1 > num2); // false
print(num1 <= num2); // true
print(num1 >= num2); // true
print(num1 == num2); // true
print(num1 != num2); // false
/* 타입 비교 */
print(num1 is int); // true
print(num1 is String); // false
print(num1 is! int); // false
/* 논리 연산자 */
// && : 둘 다 맞으면 true
bool result = 12 > 10 && 13 < 2; // false
// || : 둘 중 하나만 맞으면 true
bool result2 = 12 > 10 || 13 < 2; // true
5. List, Map, Set
5-1. List
// List 선언
List<String> phone = ["아이폰", "갤럭시"];
List<int> numbers = [1,2,3,4,5];
// index
print(phone[0]);
print(numbers[2]);
// List 길이
print(phone.length); // 2
// List 추가
numbers.add(6);
// List 요소 제거
numbers.remove(3);
print(numbers); // [1,2,4,5,6]
// List index 찾기
print(phone.indexOf("갤럭시")); // 1
// List 요소들 참조하기
phone.forEach((p){
print(p);
});
5-2. map
// Map(key, value) 선언
Map<String, String> dictionary = {
"Harry Potter" : "해리포터",
"Hermione Granger" : "헤르미온느 그레인저"
};
print(dictionary);
Map<int, bool> d1 = {1: true, 2: false};
print(d1);
// map 추가
dictionary.addAll({"Sipderman": "스파이더맨"});
print(dictionary);
// key 값 보기
Iterable<dynamic> keys = d1.keys
// values 값 보기
Iterable<dynamic> values = d1.values
// map key 값으로 value 찾기
print(dictionary["Harry Potter"]); // 해리포터
// map 값 변경
d1[1] = false
// map 삭제 - key 값이 "Harry Potter" 인 값이 지워진다.
dictionary.remove("Harry Potter");
// map 보기
print(d1.keys);
print(d1.values);
// list to map to list
final test = [123, 456, 789];
// list to map
final testMap = test.asMap();
// {0: 123, 1: 456, 2: 789}
print(test.asMap());
// map to list
final testMapList = testMap.entries.toList();
// [MapEntry(0: 123), MapEntry(1: 456), MapEntry(2: 789)]
print(testMapList);
print(testMapList[1].key); // 1
print(testMapList[1].value); // 456
5-3. Set
※ 중복을 허용하지 않는다.
// Set 선언
Set<String> names = {
"aaa",
"bbb",
"Flutter"
};
print(names);
// Set 추가
names.add("ccc");
// Set 값 찾기
print(names.contains("Flutter")); // true
6. 조건문(it, switch)
int number = 3;
if(number > 3) {
print("값이 3 보다 큽니다.");
} else if(number < 3) {
pinrt("값이 3 보다 작습니다.");
} else {
print("값이 3 입니다.");
}
switch(number % 3) {
case 0:
print("나머지가 0입니다.");
break;
case 1: {
print("나머지가 1입니다.");
break;
}
default:
print("나머지가 2입니다.");
break;
}
7. 반복문
// 기본 for loop
for(int i=0; i<10; i++) {
print(i);
}
// List 요소 쉽게 접근하기
List<int> numbers = [1,2,3,4,5]
for(int number in numbers) {
print(number);
}
// 기본 while loop
int total = 0;
while(total < 10) {
total += 1;
if(total == 3) continue;
if(total == 5) break;
print(total);
}
// do while
do {
total += 1;
} while(total < 10);
continue 는 현재 loop를 종료하고 다음 loop를 실행하라는 키워드이다. break는 loop를 빠져나오라는 키워드이다.
8. enum
enum Status {
approved,
pending,
regected
}
void main() {
Status status = Status.approved;
if(status == Status.approved) print("승인입니다.");
else if(status == Status.pending) print("대기입니다.");
else print("거절입니다.");
}
9. 함수 선언
void main() {
addNumbers(10);
addNumbers(10, 25);
addNumbers(10, 25, 30);
nameAddNumbers(10, Y: 20, z: 40);
nameAddNumbers(10, Y: 20);
print("sum 은 ${addNumbersResult(20, 40, 70)}");
}
/*
* 세개의 숫자 (x,y,z)를 더하고 짝수인지 홀수인지 알려주는 함수
* position parameter : 순서가 중요한 파라미터 (int x)
* optional parameter : 있어도 되고 없어도 되는 파라미터로 대괄호([])안에 표기한다.
* ([int y = 20, int z = 20])
*/
addNumbers(int x, [int y = 20, int z = 20]) {
print("x : $x , y : $y , z : $z ");
if((x + y + z) % 2 == 0) print("짝수입니다.");
else print("홀수입니다.");
}
/*
* 세개의 숫자 (x,y,z)를 더하고 짝수인지 홀수인지 알려주는 함수
* position parameter : 순서가 중요한 파라미터 (int x)
* named parameter : 이름이 있는 파라미터(순서가 아닌 이름으로 호출해야 한다.
* {required int y, int z = 30})
*/
nameAddNumbers(int x, {
required int y,
int z = 30
}) {
addNumbers(x, y, z);
}
/*
* 반환값이 있는 세개의 숫자 (x,y,z)를 더한 값을 리턴하는 함수
* return : 반환 키워드
*/
int addNumbersResult(int x, int y, int z) {
return x + y + z;
}
/*
* 반환값이 있는 세개의 숫자 (x,y,z)를 더한 값을 리턴하는 함수
* arrow function : 반환값을 (=>)로 바로 지정할 수 있다.
*/
int addNumberResultArrow(int x, int y, int z) => x+y+z
- argument(인자) : 실제로 함수가 호출될 때 넘기는 변숫값
- parameter(매개변수) : 함수를 정의할 때 사용되는 변수
+ typedef : 자료형을 새롭게 이름 붙일 때 사용되는 키워드이다.
void main() {
Operation operation = add;
print(operation(10, 20, 30));
operation = substract;
print(operation(50, 30, 10));
print(calculate(10, 10, 10, add));
}
// typedef 를 사용하려면 리턴값, 파라미터가 모두 동일해야 한다.
typedef Operation = int Function(int x, int y, int z);
// 더하기
int add(int x, int y, int z) => x + y + z;
// 빼기
int substract(int x, int y, int z) => x - y - z;
// 계산
int calculate(int x, int y, int z, Operation op) {
return op(x, y, z);
}
728x90
'Dart' 카테고리의 다른 글
[Dart] .. (0) | 2023.03.09 |
---|---|
[Dart] 난수 생성하기 (0) | 2023.02.05 |
[Dart] 비동기 프로그래밍 (0) | 2023.01.16 |
[Dart] 함수형 프로그래밍 (0) | 2023.01.15 |
[Dart] 객체 지향 프로그래밍 (1) | 2023.01.12 |