반응형
Strings
https://tact-by-example.org/02-strings
- TACT는 strings 을 기본적으로 지원
- 문자열은 유니코드를 지원하며, ‘/n’ 과 같은 특수 이스케이프 문자가 없음.
- 스마트 컨트랙트 내에서 문자열의 사용은 제한적이며, 수정이 불가능하다.
특징 3가지
- 문자열의 제한된 사용
- 자금을 관리하기 위한 정확한 프로그램이 때문에, 문자열은 로깅이나 오류 메시지 출력과 같은 용도로만 사용
- 불변성
- 한 번 생성된 문자열은 수정할 수 없음
- StringBuilder의 활용
- 런타임에서 연결해야할 때, StringBuilder 를 사용한다.
- StringBuilder는 문자열을 효율적으로 처리하며, 문자열을 추가할 수 있는 append() 메서드를 제공
예제 코드를 살펴보면 아래와 같다.
import "@stdlib/deploy";
contract Strings with Deployable {
// contract persistent state variables
s1: String = "hello world";
s2: String = "yes unicode 😀 😅 你好 no escaping"; /// TODO: <https://github.com/tact-lang/tact/issues/25> \\n \\t";
s3: String;
s4: String;
s5: String;
s6: String;
init() {
let i1: Int = -12345;
let i2: Int = 6780000000; // coins = ton("6.78")
self.s3 = i1.toString();
self.s4 = i1.toFloatString(3);
self.s5 = i2.toCoinsString();
// gas efficient helper to concatenate strings in run-time
let sb: StringBuilder = beginString();
sb.append(self.s1);
sb.append(", your balance is: ");
sb.append(self.s5);
self.s6 = sb.toString();
}
receive("show all") {
dump(self.s1);
dump(self.s2);
dump(self.s3);
dump(self.s4);
dump(self.s5);
dump(self.s6);
}
receive("show ops") {
let s: String = "how are you?"; // temporary variable
dump(s);
/// TODO: <https://github.com/tact-lang/tact/issues/24>
/// dump(self.s1 == "hello world");
/// dump(self.s1 != s);
}
get fun result(): String {
return self.s1;
}
}
result() 를 호출해보면 s1인 “hello world”가 출력된다.
> 🔍 Calling getter result:
Return value: "hello world"
show all()을 호출해보면, 아래와 같은 로그를 확인할 수 있다.
- s1은 상태 변수에 저장되어 있는 “hello world” 그대로 출력
- s1: String = "hello world";
- s2도 마찬가지로 상태 변수에 저장되어 있는 “yes unicode 😀 😅 你好 no escaping” 그대로 출력
- s2: String = "yes unicode 😀 😅 你好 no escaping";
- s3 ~ s6 는 init() 함수에서 초기화된 값들이 출력
- s3: -12345
- s4: -12.345 (소수점 세자리로 표현)
- s5: 6.78(decimal이 9인 ton으로 표현)
- s6: hello world + , your balance is : + 6.78
> 📤 Sending message show all:
Message sent: "show all", from deployer, to contract, value 1, not bounced
#DEBUG#: hello world
#DEBUG#: yes unicode 😀 😅 你好 no escaping
#DEBUG#: -12345
#DEBUG#: -12.345
#DEBUG#: 6.78
#DEBUG#: hello world, your balance is: 6.78
Transaction Executed: success, Exit Code: 0, Gas: 0.010498
반응형
'블록체인 > TACT' 카테고리의 다른 글
TON 블록체인 네트워크 테스트넷 faucet 받기 (0) | 2024.05.21 |
---|---|
[Tact] Addresses (0) | 2024.05.17 |
[Tact] Bools (0) | 2024.05.15 |
[Tact] Integer Opertaions (0) | 2024.05.15 |
[Tact] Integers (0) | 2024.05.15 |
댓글