파이썬과의 차이점
1. dart에서는 var를 생략할 수가 없고, var 이외의 정의는 null이 안되기 때문에 반드시 값을 할당해줘야 한다.
2. 변수=변수로 정의하면 두개의 메로리 주소가 같아진다. (파이썬은 슬라이스외에는 주소가 달라짐)
3. 리스트에 변수를 넣고, 변수값을 바꾸면 리스트의 값도 같이 바뀐다. (메모리 주소를 공유함)
4. 리스트에 변수가 있고, 변수에 차원이 있을때 리스트에서 []를 붙여서 조회가 안됨. 조회가 안되기 때문에 당연히 수정도 안됨.
5. 해보지는 않았지만 map도 4와 같을 것으로 추정됨.
(DartPad에서 실행)
// https://dart-lang.github.io/linter/lints/non_constant_identifier_names.html
// String hashCodeHex(var i) {
// 변수 처음은 소문자로 쓰라고 추천함
String hashCodeHex(var i) {
// https://dart-lang.github.io/linter/lints/prefer_interpolation_to_compose_strings.html
// return "0x" + identityHashCode(i).toRadixString(16).toUpperCase();
// +를 쓰는것보다 ${}로 쓰는 것을 추천함
return "0x${identityHashCode(i).toRadixString(16).toUpperCase()}";
}
class Ppp {
int i = 0;
pp(var str1, var str2) {
i += 1;
print('\x1B[31m$i\x1B[0m: $str1 $str2');
}
}
void main() {
//Ppp p= new Ppp();
Ppp p = Ppp(); // new는 어쩔때 쓰는거지?
String a = 1.toString();
p.pp("숫자룰 문자로", a);
a = '123';
p.pp("변수 재사용", a);
// int a=0; // 선언을 한번 했으면 다시 선언이 안됨
// a=0; // var로 선언후 처음에 문자를 할당하면 다음에 숫자 할당 안됨
// dynamic a=...; 으로 선언을 했으면 여러 타입으로 사용 가능
int s = int.parse('7');
p.pp('문자를 숫자로', s);
p.pp('문자에 곱하기', 'a' * 10);
a = "만남";
p.pp("한글 출력", a);
// https://dart-lang.github.io/linter/lints/prefer_adjacent_string_concatenation.html
// String result = 'a' + 'b';
// 더하기가 되는건지 확인해본건데...+를 빼라고 추천함
String result = 'a' 'b';
for (int i = 0; i < 10; i++) {
result = result + i.toString();
}
p.pp("문자에 문자 더하기", result);
Map m = {'a': 1, 'b': 2};
p.pp("map 정의", m);
m['c'] = 3;
p.pp("기존 map에 추가", m);
var l2 = [1, 2, 3];
var l = ['a', 0, m, l2];
p.pp("다양한 변수의 리스트 정의", l);
// l[2]["e"]=3 // 맵변수에 추가가 안됨. 다음 방법으로 해야함
m['d'] = 4;
p.pp("리스트에 속한 맵의 원본 데이터를 수정", l);
//print(l[3][0]); // 리스트 안에 리스트 인덱스는 조회가 안됨
l2[2] = 4;
l2.add(5);
p.pp("리스트에 속한 리스트의 원본 데이터를 수정", l);
p.pp("리스트 출력", l2);
// https://dart-lang.github.io/linter/lints/prefer_typing_uninitialized_variables.html
// var l3;
// Null로 두지 않는 걸 추천함
var l3 = l2;
l3[0] = -1;
p.pp("리스트를 리스트로 받은후에 리스트 수정", l2); //
p.pp("리스트 두개가 동일한 hash code인지?", identical(l2, l3));
p.pp("l2 hash code", identityHashCode(l2));
p.pp("l3 hash code", identityHashCode(l3));
// var l4= new List.from(l2);
List l4 = List.from(l2);
p.pp("리스트 출력", l2);
l4[0] = 0;
p.pp("리스트를 리스트 from으로 받은후에 리스트 수정", l2);
p.pp("리스트 두개가 동일한 hash code인지?", identical(l2, l4));
p.pp("l2 hash code", hashCodeHex(l2));
//print(12.toRadixString(2));
p.pp("l4 hash code", hashCodeHex(l4));
var l5 = [1, l2, 2];
p.pp("l2", l2);
p.pp("l5", l5);
p.pp("l2 hash code", hashCodeHex(l2));
p.pp("l5 hash code", hashCodeHex(l5));
a = """
1:012asdbd
2:asdbd\\
3:0123\n
4:.""";
p.pp("그대로 출력하기", a);
a = r"""
1:012asdbd
2:asdbd\\
3:0123\n
4:.""";
p.pp("진짜 그대로 출력하기(raw)", a);
String oldVar = 'test';
String? newVar; // Null 변수 정의
p.pp("숫자나 문자 변수는 list나 map처럼 '='로 할당하면 show copy가 되지 않음. oldVar 변수", oldVar);
p.pp("newVar 변수(Null정의)", newVar);
newVar=oldVar;
oldVar="test2";
p.pp("oldVar 변수", oldVar);
p.pp("newVar 변수(newVar=oldVar로 선언후 oldVar를 변경해도 newVar가 바뀌지 않음)", newVar);
}
/* 출력 결과
1: 숫자룰 문자로 1
2: 변수 재사용 123
3: 문자를 숫자로 7
4: 문자에 곱하기 aaaaaaaaaa
5: 한글 출력 만남
6: 문자에 문자 더하기 ab0123456789
7: map 정의 {a: 1, b: 2}
8: 기존 map에 추가 {a: 1, b: 2, c: 3}
9: 다양한 변수의 리스트 정의 [a, 0, {a: 1, b: 2, c: 3}, [1, 2, 3]]
10: 리스트에 속한 맵의 원본 데이터를 수정 [a, 0, {a: 1, b: 2, c: 3, d: 4}, [1, 2, 3]]
11: 리스트에 속한 리스트의 원본 데이터를 수정 [a, 0, {a: 1, b: 2, c: 3, d: 4}, [1, 2, 4, 5]]
12: 리스트 출력 [1, 2, 4, 5]
13: 리스트를 리스트로 받은후에 리스트 수정 [-1, 2, 4, 5]
14: 리스트 두개가 동일한 hash code인지? true
15: l2 hash code 835683834
16: l3 hash code 835683834
17: 리스트 출력 [-1, 2, 4, 5]
18: 리스트를 리스트 from으로 받은후에 리스트 수정 [-1, 2, 4, 5]
19: 리스트 두개가 동일한 hash code인지? false
20: l2 hash code 0x31CF85FA
21: l4 hash code 0x51C831
22: l2 [-1, 2, 4, 5]
23: l5 [1, [-1, 2, 4, 5], 2]
24: l2 hash code 0x31CF85FA
25: l5 hash code 0x16BA544D
26: 그대로 출력하기
1:012asdbd
2:asdbd\
3:0123
4:.
27: 진짜 그대로 출력하기(raw)
1:012asdbd
2:asdbd\\
3:0123\n
4:.
28: 숫자나 문자 변수는 list나 map처럼 '='로 할당하면 show copy가 되지 않음. oldVar 변수 test
29: newVar 변수(Null정의) null
30: oldVar 변수 test2
31: newVar 변수(newVar=oldVar로 선언후 oldVar를 변경해도 newVar가 바뀌지 않음) test
*/
[Dart] for문에서 사용하는 변수 정의 위치 차이 (0) | 2023.02.28 |
---|---|
[Dart] 파일 읽기에서 동기(synchronous), 비동기(asynchronous) 차이 (0) | 2023.02.27 |
Dart 언어 공부를 위한 초보를 위한 DartPad(다트패드) (0) | 2023.02.22 |
[Dart] python numpy vs numdart (0) | 2023.02.20 |
티스토리에서 Dart가 인기 없는 언어임을 알 수 있는 증거 (0) | 2023.02.20 |
댓글 영역