이전글
[클래리티] 6. 맵
이전글 [클래리티] 5. 변수와 상수2이전글 [클래리티] 4. 변수와 상수1이전글 [클래리티] 3. 클래리티 기본 규칙이전글 [클래리티] 2. 히로 플랫폼(Hiro Platform)히로 플랫폼(Hiro Platform) 히로 플
kwjdnjs.tistory.com
함수
이번 글에서는 클래리티의 함수에 대해 알아보겠습니다.
1. 함수의 종류
클래리티에서 사용하는 함수는 크게 public, private, read-only 세 종류입니다.
- public은 외부 계정과 컨트랙트에서 호출이 가능한 함수입니다.
- private은 코드가 작성된 컨트랙에서만 호출이 가능한 함수입니다.
- read-only는 함수 내부에서 변수의 값을 수정할 수 없는 함수입니다.
2. 함수 선언
클래리티의 함수는 함수 종류, 함수 서명, 함수 body의 세 부분으로 이뤄져 있습니다.
먼저 public, private, read-only 중 하나의 종류를 선택한 후 함수 서명을 넣은 뒤에 실제 함수에서 실행할 내용을 입력하면 됩니다.
함수 서명은 함수 이름과 매개변수로 이뤄진 부분을 말합니다. 다음과 같은 것이 함수 서명이 됩니다.
(multiply (a uint) (b uint))
위의 함수 서명의 경우 함수 이름이 multiply이고 uint 타입의 매개변수 a와 b로 이뤄진 것을 알 수 있습니다. 또한 매개변수의 경우 매개변수의 타입을 뒤에 명시해줘야 하는 것도 알 수 있습니다.
이제 완성된 형태의 함수를 보겠습니다.
(define-public (multiply (a uint) (b uint))
(ok (* a b))
)
위 함수는 pulic 함수이고 multiply라는 이름이며 매개변수는 uint 타입의 a와 b로 이뤄져 있으며, 함수가 실행될 경우 a*b를 반환하는 것을 알 수 있습니다.
정리하면 define-public은 함수 종류, (multiply (a uint) (b uint))는 함수 서명, (ok (* a b))는 함수 body입니다.
3. begin
클래리티에서 함수를 작성할 때 주의할 것이 하나 있습니다. 바로 함수 body에는 한 줄의 코드만 작성이 가능하다는 점입니다.
만약 복잡한 형태의 명령을 수행해야 한다면 begin을 사용하면 됩니다. 다음과 같이 begin으로 감싸주게 되면 여러 코드가 실행된 후 마지막에 실행된 값을 반환하게 됩니다.
(define-public (print-twice (first (string-ascii 40)) (second (string-ascii 40)))
(begin
(print first)
(print second)
(ok true)
)
)
(print-twice "Hello world!" "Multiple prints!")
위 코드의 경우 print가 모두 실행된 뒤 함수가 true를 반환하게 됩니다.
4. public, private, read-only
마지막으로 public, private, read-only가 어떻게 사용되는지 알아보겠습니다.
먼저 public 함수는 반드시 응답 타입의 값을 반환해야 합니다. 즉, public 함수는 ok나 err를 반환해야 합니다.
작업이 정상적으로 이뤄졌으면 ok, 아니면 err를 반환하면 됩니다.
여기에서 중요한 점이 하나 있습니다. 함수가 ok가 아닌 err를 반환하게 되면 함수 내에서 실행되었던 모든 내용이 취소된다는 점입니다. 이 부분을 생각하면서 함수를 작성해야 합니다.
private 함수는 컨트랙트 외부에서 호출이 불가능하다는 차이점만 제외하면 public 함수와 동일합니다.
read-only 함수는 함수 내부에서 변수의 값을 수정할 수 없고, 매개변수의 연산을 수행하는 등 데이터를 읽어올 수만 있는 함수입니다. 다음 예제처럼 사용할 수 있습니다.
(define-read-only (add (a uint) (b uint))
(+ a b)
)
(print (add u5 u10))
read-only 함수의 큰 특징 중에 하나는 함수 호출 과정에서 트랜잭션을 보낼 필요가 없다는 점입니다. read-only는 스택스에 저장된 값을 바꾸지 않고 값을 읽어오기만 하기 때문입니다.
지금까지 클래리티에서 사용되는 함수의 종류와 사용 방법에 대해 알아봤습니다. 감사합니다.
다음글
[클래리티] 8. 제어 흐름과 예외 처리
이전글 [클래리티] 7. 함수이전글 [클래리티] 6. 맵이전글 [클래리티] 5. 변수와 상수2이전글 [클래리티] 4. 변수와 상수1이전글 [클래리티] 3. 클래리티 기본 규칙이전글 [클래리티] 2. 히로 플랫
kwjdnjs.tistory.com
'스택스 > 클래리티' 카테고리의 다른 글
[클래리티] 8. 제어 흐름과 예외 처리 (0) | 2024.10.15 |
---|---|
[클래리티] 6. 맵 (0) | 2024.08.20 |
[클래리티] 5. 변수와 상수2 (0) | 2024.07.16 |
[클래리티] 4. 변수와 상수1 (0) | 2024.07.05 |
[클래리티] 3. 클래리티 기본 규칙 (1) | 2024.06.10 |