이전글
[클래리티] 4. 변수와 상수1
이전글 [클래리티] 3. 클래리티 기본 규칙이전글 [클래리티] 2. 히로 플랫폼(Hiro Platform)히로 플랫폼(Hiro Platform) 히로 플랫폼은 스택스 스마트 컨트랙트 개발을 돕기 위해 제작된 웹 기반 개발
kwjdnjs.tistory.com
변수와 상수2
지난 글에 이어서 조금 더 복잡한 자료형에 대해 알아보겠습니다.
1. 시퀀스 자료형
클래리티에서 사용하는 시퀀스 자료형은 아래와 같습니다.
- 버퍼: 고정된 길이의 16진수 값을 저장합니다. '0x'로 시작하는 값만을 사용해야 합니다.
- 문자열: UTF-8 문자열을 사용할 경우 u"text"처럼 u로 시작해야 합니다.
- 배열: 하나의 배열에는 같은 자료형 데이터만 사용할 수 있습니다.
2. 복합 자료형
클래리티에서 사용하는 복합 자료형은 아래와 같습니다.
- 옵셔널: 아무 자료형의 값을 넣고 싶거나 none 값을 넣고 싶을 때 사용하는 타입입니다.
- 튜플: 키-값으로 이뤄진 자료형으로 각 필드가 각자만의 자료형을 가집니다.
- 응답: 옵셔널과 유사하지만 특정 실행 과정에서 발생하는 성공과 실패에 관한 값을 가지는 데 사용합니다.
3. 키워드
키워드는 미리 정의되어 있는 특별한 단어를 말합니다. 예를 들어 true, false, none도 키워드입니다. 다른 키워드로는 block-height, burn-block-height, tx-sender, contract-caller가 있습니다.
4. 변수와 상수의 선언
이제 시퀀스 자료형과 복합 자료형의 변수와 상수 선언 방법에 대해 알아보겠습니다.
먼저 클래리티에서 배열, 옵션, 튜플, 응답을 표현하는 방법에 대해 알아보겠습니다.
클래리티에서 배열은 아래와 같이 list를 이용합니다.
(list 4 8 15 16 23 42)
옵셔널의 경우 아래와 같이 some을 사용해서 다양한 자료형을 넣을 수 있습니다.
(some u5)
(some "An optional containing a string.")
(some (list 4 8 15 16 23 42))
none값은 이름 그래도 none으로 사용하면 됩니다.
(some none)
만약 some을 풀고 옵셔널 값에 접근하고 싶다면 unwrap-panic을 이용하면 됩니다. 다만 none은 풀 수 없습니다.
(unwrap-panic (some u10))
튜플은 다음과 같이 대괄호와 함께 키-값을 입력하여 사용하면 됩니다.
{
id: u5,
username: "ClarityIsAwesome",
address: 'ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE
}
튜플은 get 함수로 특정한 값에 접근할 수 있습니다.
(get username { id: 5, username: "ClarityIsAwesome" })
두 개의 튜플을 merge 함수를 이용해 하나로 묶을 수 있습니다.
(merge
{id: u6, score: 10}
{score: u50}
)
응답 자료형은 옵셔널과 유사하게 다른 자료형의 데이터를 담아 사용할 수 있습니다. 옵셔널과의 차이점이라면 응답은 특정 행동에 대한 성공과 실패를 표현하기 위해 사용한다는 점입니다.
(ok true)
(err u5)
응답도 unwrap-panic으로 풀 수 있습니다.
(unwrap-panic (ok true))
이제 상수를 선언하는 방법에 대해 알아보겠습니다. 상수의 경우 이전 기본 자료형처럼 define-constant와 이름을 함께 작성한 뒤 값을 넣으면 됩니다.
(define-constant my-constant "This is a constant value")
(define-constant my-constant 0x68656c6c6f21)
(define-constant contract-owner tx-sender)
그다음으로 변수를 선언하는 방법에 대해 알아보겠습니다.
시퀀스 자료형의 경우 고정된 길이만 사용이 가능하기 때문에 최대 길이를 자료형과 함께 넣어서 변수를 선언해야 합니다.
(define-data-var buffer (buff 4) 0x68)
(define-data-var message (string-ascii 15) "This works.")
배열의 경우 배열의 자료형도 길이와 함께 정의해야 합니다.
(define-data-var li (list 4 int) (list 3 4 5))
복합 자료형인 튜플의 경우 다음과 같이 타입을 먼저 정의한 후 사용하면 됩니다.
(define-data-var high-score
;; Tuple type definition:
{
score: uint,
who: (optional principal),
at-height: uint
}
;; Tuple value:
{
score: u0,
who: none,
at-height: u0
}
)
변수의 값을 변경하거나 가져올 때에는 이전과 동일하게 var-set, var-get을 사용하면 됩니다.
다음글
[클래리티] 6. 맵
이전글 [클래리티] 5. 변수와 상수2이전글 [클래리티] 4. 변수와 상수1이전글 [클래리티] 3. 클래리티 기본 규칙이전글 [클래리티] 2. 히로 플랫폼(Hiro Platform)히로 플랫폼(Hiro Platform) 히로 플
kwjdnjs.tistory.com
'스택스 > 클래리티' 카테고리의 다른 글
[클래리티] 7. 함수 (0) | 2024.10.07 |
---|---|
[클래리티] 6. 맵 (0) | 2024.08.20 |
[클래리티] 4. 변수와 상수1 (0) | 2024.07.05 |
[클래리티] 3. 클래리티 기본 규칙 (1) | 2024.06.10 |
[클래리티] 2. 히로 플랫폼(Hiro Platform) (0) | 2024.06.06 |