일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- package
- 웹크롤러
- 파이썬
- List
- map
- textstyle
- python
- kotlin
- crawler
- Class
- ML
- DART
- Flutter
- 크롤러
- 함수
- text
- 다트
- import
- Android
- 코틀린
- 콜렉션
- function
- set
- pushnamed
- Collection
- 클래스
- Yocto
- 플러터
- animation
- variable
- Today
- Total
조용한 담장
Dart : Variables 본문
Dart Variables
모든 변수는 object 이며, object 는 class의 instance 이다. 모든 object 는 Object class를 상속한다.
Types
Type inference
var name = 'Bob';
// String name = 'Bob';
변수 name
은 Object를 가리키는 reference를 가지게 된다.
위의 경우에는 'Bob' 이라는 문자열을 보고 String Object 를 reference의 대상으로 지정한다.
해당 변수의 타입 변경이 있을 수 있다면 dynamic
을 쓰면 되나 권장되진 않는다.
dynamic name = 'Bob';
if (name is String) return true;
Final and const
변수의 값을 변경하지 않을 경우에 final 을 쓴다. final 은 한번만 값을 설정할 수 있다.
이때 var 는 사용하지 않는다.
final name = 'Bob';
// final var name = 'Bob'; // Error!
final String nickname = 'Bobby';
// nickname = 'Alice'; // Error!
A final variable can be set only once; a const variable is a compile-time constant. (Const variables are implicitly final.) A final top-level or class variable is initialized the first time it’s used.
compile-time constant 변수 선언.
const bar = 1000000; // Unit of pressure (dynes/cm2)
const double atm = 1.01325 * bar; // Standard atmosphere
상수값( constant values) 선언.
Declaring constant variables to create constant values, as well as to declare constructors that create constant values. Any variable can have a constant value.
var foo = const [];
const baz = []; // Equivalent to `const []`
final bar = const [];
상수(constant) 가 되는 변수인 경우 const를 생략할 수 있고 가능한 안쓰는 방향을 권하고 있다.
foo = [1, 2, 3]; // Was const []
baz = [42]; // Error!
bar = [11]; // Error!
foo
는 final 과 const 가 아니고 var 이기 때문에 const value 가지고 있었지만 새로운 값(non-const value)을 다시 가질 수 있다.
baz
는 const variable 이기 때문에 값을 바꿀 수 없다.
bar
는 final 이기 때문에 한번만 값을 설정할 수 있다.
Numbers
var x = 1;
var y = 1.1;
var hex = 0xDEADBEEF;
var exponents = 1.42e5;
double z = 1; // z == 1.0
String from/to number
// String -> int, double
var one = int.parse('1'); // int one = 1;
var onePointOne = double.parse('1.1'); // double onePointOne = 1.1;
// int, double -> String
String oneAsString = 1.toString(); // String oneAsString = '1';
String piAsString = 3.14159.toStringAsFixed(2); // String piAsString = '3.14';
Bitwise operators (<<, >> &, |)
var a = 3 << 1; // 6
var b = 3 >> 1; // 1
var c = 3 & 1; // 1
var d = 3 | 4; // 7
print(a + b + c+ d); // 15
Const numbers (compile-time constants)
const msPerSecond = 1000;
const secondsUntilRetry = 5;
const msUntilRetry = secondsUntilRetry * msPerSecond; // 5000
Strings
Operator | Expression | Result |
---|---|---|
* | String S * 3 | new String SSS |
+ | String A + String B | new String AB |
== | String A == String B | return true or false |
[] | String A[index] | return Character of index |
var s1 = 'Single quotes';
var s2 = "Double quotes";
var s3 = 'It\'s ';
var s4 = "It's ";
print(s4*3); // It's It's It's
print('$s1 ' + 'and' + ' $s2'); // Single quotes and Double quotes
print('${s1.toUpperCase()}, ${s1.length}'); // SINGLE QUOTES, 13
print(s2.toUpperCase() + ', 13'); // DOUBLE QUOTES, 13
var s5 = s3 + s1;
var s6 = 'The + operator ' 'works, ' 'as well.';
if(s5 == 'It\'s Single quotes')
print(s6); // The + operator works, as well.
var s7 = 'String '
'concatenation'
" works even over line breaks.";
var s8 = '''
You can create
multi-line strings like this one.
''';
var s9 = """This is also a
multi-line string.""";
var s = r'In a raw string, not even \n gets special treatment.'; // In a raw string, not even \n gets special treatment.
print('${s4[0]} ${s4[1]} ${s4[2]} ${s4[3]}'); // I t ' s
print(s4.runes.toList()); // [73, 116, 39, 115, 32]
Booleans
true
and false
// Check for an empty string.
var fullName = '';
assert(fullName.isEmpty);
// Check for zero.
var hitPoints = 0;
assert(hitPoints <= 0);
// Check for null.
var unicorn;
assert(unicorn == null);
// Check for NaN.
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);
Lists
Operator | Expression | Result |
---|---|---|
+ | List A + List B | new List AB |
[] | List A[0] | return value of index |
[]= | List A[index] = value | set value at index |
== | List A == List B | return false |
var listEmpty = [];
print(listEmpty.length); // 0
listEmpty.add(3);
print(listEmpty); // [3]
print(listEmpty.length); // 1
var list1 = [1, 2, 3, 4]; // List<int> list1 = [1, 2, 3, 4];
print(list1); // [1, 2, 3, 4]
var constantList = const [1, 2, 3];
print(constantList.length); // 3
var list2 = [0, ...list1];
print(list2); // [0, 1, 2, 3, 4]
var list3; // list3 == null
var list4 = [0, ...?list3];
print(list4); // [0]
const hasMoreMoney = true;
var list5 = [
'Phone',
if (hasMoreMoney) 'Tablet'
];
print(list5); // [Phone, Tablet]
var list6 = [
'#0',
for (var i in list1) '#$i'
];
print(list6); // [#0, #1, #2, #3, #4]
var list1 = [1, 2, 3, 4];
var list2 = [1, 2, 3, 0];
print(list1 + list2); // [1, 2, 3, 4, 1, 2, 3, 0]
print(list2[3]); // 0
list2[3] = 4;
print(list2); // [1, 2, 3, 4]
print(list1 == list2); // false
print(list1 == [1, 2, 3, 4]); // false
print(list1 == list1); // true
spread operator, null-aware spread operator
...
는 여러개의 엘러멘트를 가진 변수를 합칠 때 쓰며, ?...
은 합치려는 변수가 null 이면 동작하지 않는다.
Sets
Operator | Expression | Result |
---|---|---|
== | Set A == Set B | return false |
var set1 = <String>{}; // Set<String> set1 = {};
// var set1 = {}; // Creates a map, not a set.
print(set1.length); // 0
set1.add('c');
print(set1); // {c}
print(set1.length); // 1
final constantSet = const {'def','ghi'};
var set2 = <String>{};
set2.addAll(set1);
set2.addAll(constantSet);
set2.add('j');
print(set2); // {c, def, ghi, j}
Set<String> set3 = {'b', ...set2};
print(set3); // {b, c, def, ghi, j}
Set<String> set4; // set4 == null
var set5 = <String>{'a', ...?set4};
print(set5); // {a}
const hasMoreMoney = true;
var set6 = <String>{
'Phone',
if (hasMoreMoney) 'Tablet'
};
print(set6); // {Phone, Tablet}
var set7 = <String>{
'I want',
for (var i in set6) '$i'
};
print(set7); // {I want, Phone, Tablet}
Set or map? The syntax for map literals is similar to that for set literals. Because map literals came first, {} defaults to the Map type. If you forget the type annotation on {} or the variable it’s assigned to, then Dart creates an object of type Map<dynamic, dynamic>.
Maps
Operator | Expression | Result |
---|---|---|
[] | Map A[key] | return value of key |
[]= | Map A[key] = value | Associates value with key |
== | Map A == Map B | return false |
// Map<String, String> fruit
var fruit = {
// Key: Value
'first': 'banana',
'second': 'apple',
'fifth': 'orange'
};
var fruit = Map();
fruit['first'] = 'banana';
fruit['second'] = 'apple';
fruit['fifth'] = 'orange';
var color = {
2: 'yellow',
10: 'green',
18: 'blue',
};
var color = Map();
color[2] = 'yellow';
color[10] = 'green';
color[18] = 'blue';
final constantMap = const {
2: 'yellow',
10: 'green',
18: 'blue',
};
fruit['fourth'] = 'grapes'; // Add a key-value pair
print(fruit['fourth']); // grapes
print(fruit[' ']); // null
var map1 = {1: 'red', ...color};
print(map1); // {1: red, 2: yellow, 10: green, 18: blue}
var map2; // map2 == null
var map3 = {1: 'one', ...?map2};
print(map3); // {1: one}
Runes
In Dart, runes are the UTF-32 code points of a string. Because a Dart string is a sequence of UTF-16 code units, expressing 32-bit Unicode values within a string requires special syntax.
Reference
'Dart' 카테고리의 다른 글
Dart : Exceptions (0) | 2019.09.20 |
---|---|
Dart : Control flow statements (0) | 2019.09.17 |
Dart : Operators (0) | 2019.09.17 |
Dart 2.5 (0) | 2019.09.11 |
Dart : Functions (1) | 2019.08.07 |