- Dart 2.12
- 선언과 변수
- class
- 제어
- 입출력
- main
Dart 2.12
홈페이지 : https://dart.dev/
매뉴얼 : https://dart.dev/guides
테스트 환경 : DartPad
Dart와 Flutter의 웹 테스트 환경
Flutter
Flutter 앱 개발을 위한 프로그래밍 언어
JavaScript 또는 원시 기계코드로 컴파일 가능
멀티 플랫폼 상에서 동작되도록 하는 앱을 위해 디자인된 프로그래밍 언어
문법은 C와 거의 동일
다른 언어의 장점을 추가하여 간결하고 강력한 기능을 제공
VS code, IntelliJ, 안드로이드 스튜디오 정도의 IDE
아직은 호불호가 갈리는 언어
Dart Native
모바일, 데스크톱, 서버, 임베디드등을 대상으로 하는 디바이스의 경우 사용
Dart 인터프리터, JIT 컴파일러, AOT 컴파일러 포함
선언과 변수
//----------------------------------------------------------
//--- 주석
//----------------------------------------------------------
// 주석
/** 주석 **/
/// 문서 주석. dartdoc 도구를 사용하여 문서 생성시 사용
//----------------------------------------------------------
//--- import, export
//----------------------------------------------------------
import 'dart:core';
import 'data:io';
import 'dart:io' show Platform; //--- platform만 사용
import 'data:math' hide flow; //--- flow만 사용 않음
import 'data:convert';
import 'data:html';
import 'package:flutter/material.dart' as lib1;
import 'package:flutter/widgets.dart' hide Flow;
import '~.dart';
//--- as 뒤는 소문자와 "_"만 사용 가능
//--- as 뒤가 전체 dart 문서를 가르킨다.
import 'package:flutter/material.dart' defferred as lib22;
await lib22.loadLibrary();
library material;
export 'src/material/ablout.dart';
//----------------------------------------------------------
//--- 변수
//----------------------------------------------------------
//--- 변수 타입
// Numbers (int, double)
// Strings (String)
// Booleans (bool)
// Lists (List, also known as arrays)
// Sets (Set)
// Maps (Map)
// Runes (Runes; often replaced by the characters API)
// Symbols (Symbol)
// The value null (Null)
//
// Object, Enum
// Future, Stream
// Naver, dynamic, void
//--- 선언
final String name; //--- 최종 변수
const String name; //--- 상수
late String name; //--- 할당시 변수 생성
int? value = null; //--- null을 가질수 있는 변수
//--- var : 한번 타입이 결정되면 변경이 불가
var? var001 = null; //--- 동적 타입
//--- dynamic : 타입이 계속 변경 가능
dynamic? var002 = null; //--- 동적 타입
name.runtimeType
name.hashCode
//--- Numbers (int, double)
var age = 1;
var hex = 0xDEADBEEF;
var exponents = 1.42e5;
num age = 1;
int age = int.parse('1');
double age = double.parse('1.1');
1.toString();
3.14159.toStringAsFixed(2);
//--- Strings (String)
String name = 'This is ${name}';
String desc = '''
~
''';
//--- Booleans (bool)
bool flag = true; //--- true, false
//--- List
List nums = const [ 1, 2, 3 ]; //--- index : 0, 1, 2, ...
var nav = ['Home', 'Plants', if (promoActive) 'Outlet'];
var listOfStrings = ['#0', for (var i in listOfInts) '#$i'];
List list02 = [...nums]; //--- nums의 깊은 복사
List list02 = [...?nums]; //--- nums의 깊은 복사
List list11 = [ {}, {} ];
List list12 = list.map((i) => {...i}).toList(); //--- 깊은 복사
//--- 깊은 복사를 하면서 값도 변경
List list12 = list.map((i) => {...i, 'name': value}).toList();
nums.forEach(function(num) {});
names.map((name) => {}); //--- Iterable을 반환
names.map((name) => 반환값).toList(); //--- List 반환
names.where((name) => 조건문).toList();
names.firstWhere((name) => 조건문);
names.singleWhere((name) => 조건문);
names.takeWhile((name) => 조건문);
names.skipWhile((name) => 조건문);
names.any((name) => 조건문);
names.every((name) => 조건문);
//--- Sets (Set)
Set ages = { 1, 2, 3 };
final aSetOfInts = {};
ages.add(~);
ages.addAll(~);
ages.length;
//--- Maps (Map)
Map user = {
'id': 1,
'name': '홍길동'
}
final aMapOfIntToDouble = {};
user['id']
user.id
//--- Symbols (Symbol)
var aaa = Symbol('~');
#~
//--- Enums
//--- enum ~ = { ~, ~ }; ~.~
//--- Object
enum PlanetType { terrestrial, gas, ice }
PlanetType.gas
PlanetType.gas.name
//--- Iterable
Iterable iterable = const [1, 2, 3];
for (final element in iterable) {
print(element);
}
Iterable naturalsTo(int n) sync* {
int k = 0;
while (k < n) {
yield k++;
}
}
Iterable naturalsDownFrom(int n) sync* {
if (n > 0) {
yield n;
yield* naturalsDownFrom(n - 1);
}
}
Stream asynchronousNaturalsTo(int n) async* {
int k = 0;
while (k < n) {
yield k++;
}
}
//----------------------------------------------------------
//--- 타입
//----------------------------------------------------------
inst as MyClass //--- Type 변환
if (inst is MyClass) {
}
if (inst is! MyClass) {
}
typedef VarTypedef = List;
typedef Compare = int Function(T a, T b);
VarTypedef aa = [1, 2, 3];
//----------------------------------------------------------
//--- Metadata
//----------------------------------------------------------
@override
@deprecated('~를 대신 사용 하세요.')
class Todo {
final String who;
final String what;
const Todo(this.who, this.what);
}
@Todo('Dash', 'Implement this function')
class
//----------------------------------------------------------
//--- 클래스
//----------------------------------------------------------
abstract class AbstractClass {
void aaa();
}
class ParentClass {
@override
void noSuchMethod(Invocation invocation) {
print('You tried to use a non-existent member: '
'${invocation.memberName}');
}
}
mixin UseClass on ParentClass {
}
//--- ParentClass : 상속하는 클래스
//--- UseClass : 재사용할 클래스 (상속 아님)
class ~ extends ParentClass //--- super에 해당
implements AbstractClass
with UseClass async {
final String name; //--- this.name
final int age;
//--- 생성자
Queue(String name, int age) {
this.name = name;
this.age = age;
}
Queue(this.name, this.age);
Queue({ required this.name, required this.age });
Queue.hybrid(String make, String model) : this(make, model, 60);
Queue.hybrid(super.make, this.model) : super(make, 60);
Queue(this.name, this.age) { //--- 생성자
super();
}
Queue(String name) : super(name) {
super.name = name;
}
Queue(this.var001 = 1); //--- 생성자
Queue({ this.var001 }); //--- 생성자, 선택적 매개변수
Queue.unlaunched(String name) : this(name, null);
String call(String a, String b, String c) {
//--- varObj(~, ~, ~) 형태로 호출 한다.
}
//--- Factory 생성자
factory Shape.fromTypeName(String typeName) {
if (typeName == 'square') return Square();
if (typeName == 'circle') return Circle();
throw ArgumentError('Unrecognized $typeName');
}
final String var002 = 'aa'; //--- 값 변경 불가
const String var003 = 'bb'; //--- 상수
static const String _aaa = '';
DateTime? ~;
//--- Getters and Setters
int? get year => year.yyyy;
String get aaa => aaa;
int get year {
return 2022;
}
set aaa(newValue) => this._aaa = newValue;
@override
String myfunc(String aa, {int bb = 80}, [int cc = 1]) {
}
}
varClass Queue = Queue(5);
varClass Queue = Queue(var001: 5); //--- 선택적 매개변수 사용
varObj.var001
print(varObj.runtimeType)
class Foo {
T first(List ts) {
T tmp = ts[0];
return tmp;
}
}
var extenderFoo = Foo();
//----------------------------------------------------------
//--- 함수
//----------------------------------------------------------
//--- 최상위 레벨의 함수
void main(List arguments) async {
}
void funcName(int argInt = 11, required String? argStr = '') {
}
//--- Optional parameter
int sumUpToFive(int a, [int? b, int? c, int? d, int? e]) {
}
//--- Named parameter
void printName(String firstName, String lastName, {String? middleName}) {
print('$firstName ${middleName ?? ''} $lastName');
}
printName('John', 'Smith', middleName: 'Who');
//--- Anonymous functions (익명 함수)
() {
}
() => ''; //--- 람다식
obj.where((param) => param).forEach(print);
//--- Async functions
Future lookUpVersion() async => '1.0.0';
await lookUpVersion();
제어
if ((~) && (~)) {
} else if ((~) || (!~)) {
} else {
}
switch ('aaa') {
case 'a': break;
default: break;
}
(true) ? 'true':'false';
value = value ?? 12; //--- value가 null이면 12 할당
obj01?.obj02?.value //--- null이 아닌 경우에만 실행
for (final item in obj) {
}
for (final item in myArray) {
}
for (int idx = 0; idx < 10; idx++) {
}
await for (final request in requestServer) {
}
while (~) {
}
do {
} while (~);
try {
throw IOException('~');
} on IOException {
} on Exception catch(e, s) {
print('Exception: $e');
print('Stack trace: $s');
} catch(e, s) {
rethrow;
} finally {
}
obj..method001() //--- 차례로 실행
..method002();
obj..aaa = '~'
..bbb = '~';
입출력
//----------------------------------------------------------
//--- 정보 확인
//----------------------------------------------------------
version = await lookUpVersion();
var entrypoint = await findEntryPoint();
var exitCode = await runExecutable(entrypoint, args);
await flushThenExit(exitCode);
//----------------------------------------------------------
//--- 표준 입출력
//----------------------------------------------------------
print('~');
stdout.write('~'); //--- 표준 출력
String line = stdin.readLineSync(); //--- 표준 입력
//----------------------------------------------------------
//--- 파일 입출력
//----------------------------------------------------------
File finp = File('version.json');
List lines = finp.readAsLinesSync();
for (String line in lines) {
print(line);
stdout.writeln(line);
}
File fout = File('version.json');
fout.createSync(); //--- 파일 생성
String contents = '~';
fout.writeAsStringSync(contents);
main
void main() {
}
최종 수정일: 2024-09-30 12:26:19
이전글 :
다음글 :