-
๋ด๊ฐ ๋ณด๊ณ ๊ณต๋ถํ๋ ค๊ณ ์ ๋ฆฌํ๋ Dart๋ฌธ๋ฒ!
dart ๋ฌธ๋ฒ ๋งค๋ด์ผ๊ณผ flutter ์์กด ์ฝ๋ฉ ๊ณต๋ถ ์ฑ ์ ๋ณด๋ฉด์ ์ ๋ฆฌ.
dart.dev/guides/language/language-tour
์ค์ต ๊ฐ๋ฅํ ์น IDE ํ๊ฒฝ : dartpad.dev/
๊ธฐ๋ณธ ๋ฌธ๋ฒ
(ํฐ์คํ ๋ฆฌ ์ฝ๋๋ธ๋ญ์ Dart๋ฅผ ์ง์ํ์ง ์์ ์ฐ์ java๋ก ํ๊ธฐํฉ๋๋ค)
์ฃผ์
//์ฃผ์ /** * ์ฃผ์ **/ /// ๋ฌธ์์ฃผ์
๋ฌธ์ฅ
๋ช ๋ น ๋จ์. ์ธ๋ฏธ์ฝ๋ก ;์ผ๋ก ๋๋๋ค.
๋ณ์
data๋ฅผ ๋ด๋ ์์. ์ข ๋ฅ๋ type, ์๋ฃํ์ด๋ผ๊ณ ํจ.dart๋ int, double, String, bool์ ๊ธฐ๋ณธ ์ ๊ณต.์ฌ์ฉ์๊ฐ ์ง์ ํ์ ์ ์ ์ํ ์ ์์.
String name; name = "ํ๊ธธ๋"; name = 'ํ๊ธธ๋'; //๋ฐ์ดํ ์ข ๋ฅ ์๊ด์์ด ๊ฐ๋ฅ
int, double์ num type์ ํ์ ์งํฉ์ด๋ผ int, double ๋์ num์ผ๋ก ์ ์ธ ๊ฐ๋ฅ.
num ํ์ ์๋ int, double ๋์ ๊ฐ๋ฅ.
int a = 1; double b = 2.0; num c = a; c = b;
ํ์ ์ถ๋ก
์์ ๊ฐ์ด type์ ์ง์ ๋ช ์ํ์ง ์๊ณ , var๋ก ๋์ฒดํ ์ ์์. (JS๊ฐ์ด)
์ผ๋ฐ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉ.
var i = 10; //int var d = 10.0 //double var s = "hello"; //String var b = true; //boolean
์์ final, const
๊ฐ์ด ๋ณํ์ง ์๋ ๊ฒฝ์ฐ๋ ์์ ์ฌ์ฉ. ์ ์ธ์ final์ ์ ์ผ ์์ ๋ถ์ด๋ฉด ๊ฐ์ด ์์ ๋์ง ์์. ํ์ ์๋ต ๊ฐ๋ฅ.
final String name = "ํ๊ธธ๋"; final name = "ํ๊ธธ๋";
์ฐ์ ์ฐ์ฐ์
+, -, *, /(๋๋๊ธฐ - double), ~/(๋ชซ - int), %(๋๋จธ์ง - int) ์ฌ์ฉ ๊ฐ๋ฅ.
+์ ๊ฒฝ์ฐ string concat์์๋ ์ฌ์ฉ.
์ฆ๊ฐ ์ฐ์ฐ์
1์ฉ ์ฆ๊ฐ(++) ๋๋ 1์ฉ ๊ฐ์(--). ํ์(์++)/์ ์(++์) ์ฐ์ฐ ๋ชจ๋ ๊ฐ๋ฅ.
๋น๊ต ์ฐ์ฐ์
==, !=, >, <, >=, <= ์ฌ์ฉ ๊ฐ๋ฅ.
๋ ผ๋ฆฌ์ฐ์ฐ์
boolean ํ์ ์ผ๋ก ๊ฒฐ๊ณผ ๋ฐํ.
&&, ||, ==, !, != ์ฌ์ฉ ๊ฐ๋ฅ.
ํ์ ๊ฒ์ฌ
is๋ฅผ ์ฌ์ฉ.
[๋ณ์] is [type] => ๊ฐ์ ํ์ ์ธ์ง[๋ณ์] is! [type] => ๋ค๋ฅธ ํ์ ์ธ์ง
int a = 1; if (a is int){~} if (a is! int){~}
ํ๋ณํ (as)
type casting. as๋ฅผ ์ฌ์ฉ. ๋ค๋ฅธ ํ์ ๋ผ๋ฆฌ๋ ๋ณํ ๋ถ๊ฐ. ์์ ๊ฐ๋ ์ผ๋ก๋ง ๋ณํ ๊ฐ๋ฅ.
ํนํ, int, double์ num์ผ๋ก ๋ฌถ์ฌ์์ง๋ง ๊ฐ์๋ ๊ด๊ณ๊ฐ ์์ด ํ๋ณํ ๋ถ๊ฐ.
var c = 10.0 num n = c as num; num n = c //as num ์๋ต ๊ฐ๋ฅ int d = c as int; //errpr
ํจ์
function. ์ฝ๋ ๋ฌถ์ ๋จ์.
ํจ์ ํํ
์ ๋ ฅ ๋ฐ๋ ๋ฌธ์ : ๋งค๊ฐ๋ณ์ parameter์ค์ ๋ก ์ ๋ ฅ๋ฐ๋ ๊ฐ : ์ธ์ argument๋ฐํ๋๋ ๊ฐ : ๋ฐํ๊ฐ Return
=> ์ผ๋ฐ์ ์ธ C๋ฌธ๋ฒ๊ณผ ๋์ผํ๋ค.
๋ณ์ ์์ $๋ฅผ ๋ถ์ฌ ๋ฌธ์์ด ๋ด์ ๋ณ์ ์ฝ์ ๊ฐ๋ฅ. (ํ์ด์ฌ์์ {}์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ๋ค)
๋ํ, ${~~}๋ถ๋ถ์ ํํ์ ์ฌ์ฉ ๊ฐ๋ฅ.
String name = "์ด์์ "; int age = 20; void main(){ print('$name์ $age์ด ์ ๋๋ค.'); print("$name์ ${name.length}๊ธ์ ์ ๋๋ค."); }
ํจ์์ ๋ฉ์๋
์ต์์ ํจ์ : class ๋ฐ์ ์์ฑํ๋ ํจ์. ์ผ๋ฐ์ ์ผ๋ก ๋งํ๋ ํจ์๋ค. (main method์ฒ๋ผ ๊ฐ์ฅ ๋ฐ์ ์์ฑ). ์ด๋์์๋ ํธ์ถ ๊ฐ๋ฅ.
method : class ๋ด๋ถ์ ์์ฑํ๋ ํจ์. ์ ์๋ class์ ๊ด๊ณ๋ ๊ธฐ๋ฅ์ ์ํ. Static์ด ๋ถ์ method๋ ์ ์ ๋ฉ์๋๊ฐ ๋์ด ์ต์์ ํจ์์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ.
์ต๋ช ํจ์
anonymouse function.
([์ธ์๋ช ]) { [๋์ or Return ๊ฐ] }
(number) { return number % 2 == 0; };
๋๋ค์
([์ธ์๋ช ]) => [๋์ or Return ๊ฐ]
(number) => number%2 == 0;
์ ํ ๋งค๊ฐ๋ณ์
์ ์์์ {}๋ก ๊ฐ์ผ ๋งค๊ฐ๋ณ์๋ ์ ํ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ. Named parameter.
void f(String name, {int age}) {}
{}๋ก ๊ฐ์ธ์ง ์์ ๋งค๊ฐ๋ณ์๋ฅผ ํ์์ ์ผ๋ก ๋๊ฒจ์ฃผ์ด์ผ ํ๊ณ , {}๋ก ๊ฐ์ผ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ์ฃผ๊ณ ์ถ๋ค๋ฉด ๋ฐ๋์ ๋งค๊ฐ๋ณ์์ ์ด๋ฆ์ ๋ถ์ฌ์ age : 5๋ก ๋๊ฒจ์ฃผ์ด์ผ ํ๋ค.
์ ํ ๋งค๊ฐ๋ณ์๋ ๊ธฐ๋ณธ๊ฐ ์ง์ ์ด ๊ฐ๋ฅํ๋ค.
void f(String name, {int age = 5}) {}
๋ถ๊ธฐ์ ๋ฐ๋ณต
if else
int a = 10; if (a % 2 == 0) {~} else if (a % 3 == 0) {~} else {~}
์ผํญ ์ฐ์ฐ
[์กฐ๊ฑด] ? [์ฐธ์ผ ๋] : [๊ฑฐ์ง์ผ ๋]
var number = a%2 ? a++ : a--
switch case
์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ผ ๋ ์ ์ฉ. enum๊ณผ ํจ๊ป ์ฌ์ฉํ ๋ ๋ชจ๋ ์ผ์ด์ค๋ฅผ ๊ฒ์ฌํด์ผ ํ๋ ๊ฐ์ ์ฑ์ด ์๊น.
Switch - case - break๋ก ๋ฌธ๋ฒ์ C์ ๋์ผ
for
์์๋ฅผ ๋ฐ๋ณต.
for (var i = 0; i < 10 ; i++){ print(i); }
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ
dart๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด!
ํด๋์ค
๊ฐ์ฒด object : ์ ์ฅ ๊ณต๊ฐ์ ํ ๋น๋์ด ๊ฐ์ ๊ฐ์ง๊ฑฐ๋ ์๋ณ์์ ์ํด ์ฐธ์กฐ๋๋ ๊ณต๊ฐ. (๋ณ์, ํจ์, ๋ฉ์๋)
์ธ์คํด์ค instance : ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑํ๋ ๊ฒ.
ํด๋์ค class : ์ธ์คํด์ค์ ์ค๊ณ๋.
์์ฑ property : ํด๋์ค ์์ ํํ๋๋ ์์ฑ.
ํด๋์ค๋ ์ผ์ข ์ ์ฌ์ฉ์ ์ ์ ํ์ !
class Person{ String name; int age; } var person = new Person(); var person2 = Person(); //new ์๋ต ๊ฐ๋ฅ
๋ณ์๋ช ๋ค์ . ์ฐ์ฐ์๋ฅผ ์ ๋ ฅ, ๊ฐ์ฒด์ property์ ์ ๊ทผ ๊ฐ๋ฅ.
print(person.name); print(person.age);
๋ฉ์๋ : ํด๋์ค ์์ ์์ฑํ๋ ํจ์. ๋ฉ์๋๋ class์ ํ๋กํผํฐ๋ฅผ ์กฐ์ํ๋ ๋ฑ์ ์ฉ๋๋ก ์ฌ์ฉ. ์ด ์ญ์ .์ฐ์ฐ์๋ฅผ ๋ถ์ฌ ์ ๊ทผ ๊ฐ๋ฅ.
์ ๊ทผ ์ง์ ์
java์์์ public, private์ ๊ฐ์ ์ญํ . ์ฌ๊ธฐ์๋ _ ์ ๋ถ์ฌ ๊ตฌ๋ถํ๋ค. (๋ถ์ด๋ฉด private)
class Person{ String name; int _age; void addOneYear(){ _age++; } } //=====๋ค๋ฅธ Dart file import 'person.dart'; void main(){ var person = Person(); person._age = 10; //error! }
์ด๋, private์ ์์ญ์ ์ ์๋ ํ์ผ ๋ด! ์ฆ, _์ด ๋ถ์ด ์์ด๋ ๊ฐ์ ํ์ผ ๋ด๋ผ๋ฉด class์ ๋ฐ์ ์์ด๋ ์์ ๋กญ๊ฒ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
์์ฑ์
์ธ์คํด์คํ ํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ์ผ์ข ์ ๋ฉ์๋. ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋ ๊ฐ์ฅ ๋จผ์ ์์ฑ๋จ. ๋ฉ์๋ ์ด๋ฆ์ ํด๋์ค๋ช ๊ณผ ๊ฐ๋ค.
class Person{ String name; int _age; Person({this.name, this._age}); //constructor } var person = Person(); var person2 = Person(name : 'ํ๊ธธ๋', _age : 20);
getter, setter
_์ ๋ถ์ธ private ๋ณ์์ ์ธ๋ถ์์ ์ ๊ทผํ๊ธฐ ์ํด ๋ง๋ค์ด์ฃผ๋ ํต๋ก๊ฐ์ ๋ฉ์๋.
//person.dart class Person{ String name; int _age = 10; int get age => _age; //getter set setAge(num value) => _age = value; //setter } //main.dart void main(){ var person = Person(); print(person.age); //10 person.setAge = 5; print(person.age); //5 }
์์
implement. ์ฃผ๋ ์ชฝ์ด super class (๋ถ๋ชจ), ๋ฐ๋ ์ชฝ์ด sub class(์์)
//๋ถ๋ชจ class class Hero{ String name = 'hero'; void run() {} } //์๋ฅผ ์์๋ฐ์ ์์ ํด๋์ค class SuperHero extend Hero{ @override //์ฌ์ ์ void run(){ super.run(); //๋ถ๋ชจ์ run์คํ this.fly(); //์ถ๊ฐ๋ก ์์์ด ๋ฐ๋ก ์ ์ํ fly๋ ์คํ. } void fly() {} } void main(){ var hero = SuperHero(); hero.run(); hero.fly(); print(hero.name); //hero ์ถ๋ ฅ }
์ถ์ ํด๋์ค
abstract class. ์ถ์ ๋ฉ์๋๋ฅผ ํฌํจํ๋ ํด๋์ค.
์ถ์ ๋ฉ์๋ : ์ ์ธ๋ง๋๊ณ ์ ์๊ฐ ์๋ ๋ฉ์๋.
์ถ์ ํด๋์ค๋ ๋ค๋ฅธ ํด๋์ค์์ implementํด์ ์์ฑํ๋ ์์ ์ฌ๋ฃ๋ก ์ฌ์ฉ๋๋ค. (ํ๊ฐ์ ๋๋? ํ ํ๋ฆฟ?)
์ด๋ ๋์ ํด๋์ค์๋ implements, ๋ฉ์๋์๋ @override ํค์๋ ์ฌ์ฉ(
์ฌ๋ฌ ์ถ์ ํด๋์ค๋ฅผ ํ๋ฒ์ implementํ ์๋ ์๊ณ , ์ถ์ ํด๋์ค๋ฅผ ๊ตฌํํ ๋๋ ๋ชจ๋ ์ถ์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํด์ผ ํ๋ค.
abstract class Monster{ void attack(); } abstract class Flyable{ void fly(); } class Bat implements Monster, Flyable( @override void attack(){ print('ํ ํด๊ธฐ!'); } @override void fly(){ print('ํ๋ญํ๋ญ'); } }
๋ฏน์ค์ธ
mixin. with๋ฅผ ์ฌ์ฉํ๋ฉด ์์ํ์ง ์๊ณ ๋ค๋ฅธ ํด๋์ค ๊ธฐ๋ฅ overwritte๊ฐ๋ฅ.
class Goblin implements Monster{ @override void attack(){ print('๊ณ ๋ธ๋ฆฐ ๊ณต๊ฒฉ'); } } class DarkGoblin extends Goblin with Hero{ } //๋คํฌ ๊ณ ๋ธ๋ฆฐ์ ๊ณ ๋ธ๋ฆฐ์ด๊ธฐ๋ ํ๋ฉฐ, ํ์ด๋ก์ด๊ธฐ๋ ํ๋ฉฐ, ๋ชฌ์คํฐ์ด๊ธฐ๋ ํจ. => ๋คํ์ฑ!
์ด๊ฑฐํ
enum type. ์์๋ฅผ ์ ์ํ๋ ํน์ํ ํํ์ ํด๋์ค. ์์์ฒ๋ผ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
enum Status { login, logout } var authStatus = Status.logout; switch(authStatus){ case Status.login: print('login'); break; case Status.logout: print('logout'); break; }
์ปฌ๋ ์
list, map, set๋ฑ์ collection์ ๊ธฐ๋ณธ ์ ๊ณตํจ.
List
์์๊ฐ ์๋ ์๋ฃ๋ฅผ ๋ด์. Dart๋ ๋ฐฐ์ด (Array)๋ฅผ ๋ณ๋๋ก ์ ๊ณตํ์ง ์๋๋ค.
List<String> items = ['a', 'b', 'c']; var items = ['a', 'b', 'c']; items[0] = 'd'; //0๋ถํฐ ์์ํ๋ index. print(items.length); //3
โป dynamic
๋ชจ๋ ํ์ ์ ๋๋ณํ๋ ํน์ ํ์ ! ์ฌ๋ฌ ํ์ ์ ํ ๋ฆฌ์คํธ์ ๋ฃ๊ฑฐ๋ ์ผ๋ฐ ๋ณ์๋ฅผ ์ ์ธํ ๋๋ ์ฌ์ฉ ๊ฐ๋ฅ.
List<dynamic> list = [1, 2, 'a'];
var list = [1, 2, 'a'];์คํ๋ ๋ ์ฐ์ฐ์
spread. '...' ์ฐ์ฐ์. ์ปฌ๋ ์ ์ ํผ์ณ์ค๋ค. ๋ค๋ฅธ ์ปฌ๋ ์ ์์ ์ปฌ๋ ์ ์ ์ฝ์ ํ ๋ ์ฌ์ฉ.
var items = ['a', 'b', 'c']; var items2 = ['d', ...items, 'e']; //d, a, b, c, e
Map
์์ ์์. ํ์ ๋น ๋ฅธ ์๋ฃ๊ตฌ์กฐ. key-value์ ์.
//Map<String, String> cityMap = {...} ๊ณผ ๊ฐ์. var cityMap = { 'korea': 'busan', 'japan': 'tokyo', 'china': 'Beijing' }; cityMap['korea'] = 'seoul'; print(cityMap.length); //3 cityMap['America'] = 'Washington'; //์ ๊ฐ ์ถ๊ฐ
Set
์งํฉ ํํ. => ์ค๋ณต ๋ถํ์ฉ
add(), remove()๋ก ์ถ๊ฐ/์ญ์ ๊ฐ๋ฅ.
contains() : ์ฐพ๋ ์๋ฃ๊ฐ ์งํฉ์ ์๋์ง ์๋์ง bool๋ก ๋ฐํ.
// Set<String> citySet = {}๊ณผ ๊ฐ์ var citySet = {'์์ธ', '๋ถ์ฐ', '๊ด์ฃผ', '๋์ ', '์ธ์ฐ'} citySet.add('๋๊ตฌ'); citySet.remove('์์ธ'); print(citySet.contatins('์ธ์ฐ'); // true
๋น์ด์๋ Set์ด๋ map์ ์์ฑํ ๋๋ ์ฃผ์! ๊ทธ๋ฅ {}๋ง ์ฐ๋ฉด Map์ผ๋ก ์ธ์ํด๋ฒ๋ฆผ.
var mySet = <String>{}; //set์ผ๋ก ์ธ์ var mySet2 = {}; //dynamic, dynamic์ธ map์ผ๋ก ์ธ์
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
Dart๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํน์ง์ ๋ชจ๋ ์ ๊ณต (๋ญ์ง....)
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ : ์๋ฃ ์ฒ๋ฆฌ๋ฅผ ์ํ์ ํ์์ ๊ณ์ฐ์ผ๋ก ์ทจ๊ธํ๋ ํจ๋ฌ๋ค์. (์ํ์ ๊ฐ๋ณ ๋ฐ์ดํฐ X)
์ผ๊ธ ๊ฐ์ฒด
ํจ์๋ฅผ ๊ฐ์ผ๋ก ์ทจ๊ธ. ์ฆ, ๋ค๋ฅธ ๋ณ์์ ํจ์๋ฅผ ๋์ ํ ์ ์์.
void greeting(String text){ print(text); } void main(){ // ํจ์๋ฅผ ๋ค๋ฅธ ๋ณ์์ ๋์ ํ ์ ์์ var f = greeting; f('hello'); }
๋ค๋ฅธ ํจ์์ ์ธ์๋ก ํจ์ ์์ฒด๋ฅผ ์ ๋ฌํ๊ฑฐ๋ ํจ์๋ฅผ ๋ฐํ๋ฐ์ ์๋ ์์.
ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ, ์์ , ๋ณ์์ ๋์ ํ๊ธฐ๊ฐ ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ '์ผ๊ธ ๊ฐ์ฒด', first-class object๋ผ๊ณ ํจ.
for๋ฌธ๊ณผ forEach()ํจ์
for : ์ธ๋ถ ๋ฐ๋ณต
forEach() : ๋ด๋ถ๋ฐ๋ณต =>(E element) {} ํํ์ ํจ์๋ฅผ ์ธ์๋ก ๋ฐ์.
items.forEach(print); // 1, 2, 3, 4, 5 items.forEach((e) { print(e); }); itmes.forEach((e) => print(e)); items.forEach(print);
where
์กฐ๊ฑด์ ํํฐ๋ง ํ ๋ ์ฌ์ฉ. ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๋ ํจ์๋ค์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ณต ๊ฐ๋ฅํ ํ์ ์ผ๋ก ๋ฐํํ์ฌ ๋ฉ์๋ ์ฒด์ธ์ผ๋ก ์ฐ๊ฒฐํด์ ์ฌ์ฉ ๊ฐ๋ฅ.
items.where((e) => e % 2 == 0).forEach(print); //2, 4
map
๋ฐ๋ณต๋๋ ๊ฐ์ ๋ค๋ฅธ ํํ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณต.
items.where((e) => e % 2 == 0).map((e) => '์ซ์ $e').forEach(print);
toList
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๋ ํจ์ ๋๋ถ๋ถ์ Iterable<T> ์ธํฐํ์ด์ค ํ์ ์ธ์คํด์ค๋ฅผ ๋ฐํ.
ํ์ง๋ง ์ค์ ์ฌ์ฉํ ๋๋ ๋๋ถ๋ถ ๋ฆฌ์คํธ ํํ๋ก ๋ณํํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์. => ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ์คํธ๋ก ๋ฐ๊ฟ์ผํจ.
final result = itmes.where((e) => e % 2 == 0).toList();
toSet
๋ฆฌ์คํธ์ ์ค๋ณต๋ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ, ์ค๋ณต์ ์ ๊ฑฐํ ๋ฆฌ์คํธ๋ฅผ ์ป๊ณ ์ถ์ ๋ ์งํฉ์ธ set์ ์ฌ์ฉ.
final result = itmes.where((e) => e % 2 == 0).toSet().toList();
any
๋ฆฌ์คํธ์ ํน์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ์์๊ฐ ์๋์ง ์๋์ง ๊ฒ์ฌํ ๋ ์ฌ์ฉํ๋ ํจ์.
print(items.any((e) => e % 2 == 0));
reduce
๋ฐ๋ณต ์์๋ฅผ ์ค์ฌ๊ฐ๋ฉด์ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ๋ ํจ์.
// ์ต๋๊ฐ์ ๊ตฌํ ๋, ์์ฐจ์ ์ผ๋ก ๋น๊ตํ๋ ๋ก์ง final result = items.reduce(max); //5
๊ธฐํ
๊ณ๋จ์ ํ๊ธฐ๋ฒ .. ์ฐ์ฐ์
cascade notation .. ์ฐ์ฐ์. ๋์ผ ๊ฐ์ฒด์์ ์ผ๋ จ์ ์์ ์ ์ํ ๊ฐ๋ฅ.
.. ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ์๋๋ฅผ ์ํํ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ๋ฐํ.
print(items ..add(6) ..remove(2)); //1, 3, 4, 5, 6
์ปฌ๋ ์ if
์กฐ๊ฑด์ ์ํด ์ปฌ๋ ์ ์ ๊ฐ์ ์กฐ์ ํ๊ฑฐ๋ ๋ค๋ฅด๊ฒ ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ฌ์ฉ.
bool promoActive = true; print([1, 2, 3, 4, 5, if (promoActive) 6]); // true์ผ ๋๋ง 6์ด ์ถ๊ฐ๋จ
์ปฌ๋ ์ for
์ปฌ๋ ์ ๋ฌธ๋ฒ ์์์ for ๋ฌธ์ ์ฌ์ฉ ๊ฐ๋ฅ.
var listOfInts = [1, 2, 3]; var listOfStrings = [ '#0', for (var i in listOfInts) '#$i' ]; //#0, #1, #2, #3
null ์ฒ๋ฆฌ
๋คํธ๋ null์ ์ฒ๋ฆฌํ ์ ์๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ๊ณต. (Dart์์๋ ๋ชจ๋ ๊ฒ์ด ๊ฐ์ฒด. int, double, bool ๊ฐ์ ํ์ ๋ค๋ ๋ชจ๋ ๊ฐ์ฒด๋ผ null๊ฐ์ ๊ฐ์ง ์๋ ์์.)
?. ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด null ์ฌ๋ถ ํ์ ๊ฐ๋ฅ.
print(name?.lentgh); //null์ถ๋ ฅ
??์ฐ์ฐ์๋ ๊ฐ์ฒด๊ฐ null์ผ ๋ ์๋์ ๊ฐ๋จํ ๊ตฌํํ๋๋ฐ ์ฌ์ฉ.
print(name?.length ?? 0); //name์ด null์ด๋ฉด 0์ ์ถ๋ ฅ
'๐STUDY > ๐ซDart&Flutter' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[flutter] widget 2 : ํ๋ฉด ๋ฐฐ์น๋ฅผ ์ํ ๋ ์ด์์-2 (0) 2021.02.07 [flutter] widget 1 : ํ๋ฉด ๋ฐฐ์น๋ฅผ ์ํ ๋ ์ด์์ (0) 2021.02.07 [flutter] StatelessWidget / StatefulWidget ์ค์ต (0) 2021.02.06 [flutter] android studio flutter Widget ์๋์์ฑ (0) 2021.02.06 [flutter] flutter ์์ ์ฝ๋ ๋ถ์ - 1 (0) 2021.02.06 ๋๊ธ