본문 바로가기
블록체인/TACT

[Tact] Strings

by 제이제이_은재 2024. 5. 17.
반응형

Strings

https://tact-by-example.org/02-strings

  • TACT는 strings 을 기본적으로 지원
  • 문자열은 유니코드를 지원하며, ‘/n’ 과 같은 특수 이스케이프 문자가 없음.
  • 스마트 컨트랙트 내에서 문자열의 사용은 제한적이며, 수정이 불가능하다.

특징 3가지

  1. 문자열의 제한된 사용
    • 자금을 관리하기 위한 정확한 프로그램이 때문에, 문자열은 로깅이나 오류 메시지 출력과 같은 용도로만 사용
  2. 불변성
    • 한 번 생성된 문자열은 수정할 수 없음
  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()을 호출해보면, 아래와 같은 로그를 확인할 수 있다.

  1. s1은 상태 변수에 저장되어 있는 “hello world” 그대로 출력
    1. s1: String = "hello world";
  2. s2도 마찬가지로 상태 변수에 저장되어 있는 “yes unicode 😀 😅 你好 no escaping” 그대로 출력
    1. s2: String = "yes unicode 😀 😅 你好 no escaping";
  3. s3 ~ s6 는 init() 함수에서 초기화된 값들이 출력
    1. s3: -12345
    2. s4: -12.345 (소수점 세자리로 표현)
    3. s5: 6.78(decimal이 9인 ton으로 표현)
    4. 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

댓글