크립토좀비 솔리디티 #9 - 함수의 반환값과 제어자

    본 포스팅은 크립토좀비(Crypto Zombies)의 레슨1 챕터10 (함수 더 알아보기 편)의 내용들을 비개발자를 대상으로 설명하고 풀이 하였습니다. 크립토좀비는 룸 네트워크(Loom Network)라는 블록체인 기반의 게임 스타트업이 만든 게임을 만들어보는 이더리움 개발 강의로서 매우 재미있고 쉽게 솔리디티(Solidity)를 배울 수 있는 가이드를 제공합니다.



    함수의 반환(Return)값


    솔리디티는 자바스크립트(Javascript)와 유사하나 몇가지 추가적으로 설정을 해야 되는 것이 있습니다. 개발자의 입장에서는 귀찮을 수 있겠지만 돈이 움직이는 것이니, 귀찮더라도 명시적으로 설정을 하는 것이 프로그램 입장에서나 프로그래머 입장에서나 컨트랙트를 이해하는데 유리할 것입니다.


    솔리디티에서 반환값 설정 사용예

    string greeting = "What's up dog";

     

    function sayHello() public returns (string) {

      return greeting;

    }


    솔리디티는 다른 언어와 다르게, 리턴값을 펑션명 다음에 지정하게 됩니다. 기존의 언어들은 펑션명 이전인데 솔리디트는 중괄호 바로 전에 한다는 것을 기억하시기 바랍니다. 


    위 펑션을 설명하자면, greeting을 그대로 반환하는 즉, sayHello 펑션을 호출하면, "What's up dog"이라는 값을 반환하는 펑션입니다. 리턴값이 greeting이기 때문에 greeting의 데이터타입인 "string"을 지정하게 됩니다.



    함수 제어자


    솔리디티는 돈이 오가는 매우 민감한 언어이기 때문에 다양한 제어자를 지정할 수 있습니다. 쉽게 생각해서 함수의 "속성"을 지정한다고 보면 될 것 같습니다. 


    위에서 설명한 펑션인 sayHello는 greeting이라는 문자열을 리턴하는 용도밖에 없습니다. 즉, 블록체인에 어떠한 영향을 주지 않게 상태를 변화(블록체인에 데이터를 쓰는 행위)시키지 않기 때문에 "데이터를 변경시키지 않고, 보기만 한다"라는 view라는 함수를 선언할 수 있습니다.


    string greeting = "What's up dog";

     

    function sayHello() public view returns (string) {

      return greeting;

    }



    view 이외에도 pure라는 함수도 가지고 있습니다. pure는 어떠한 데이터도 접근하지 않을 때를 의미합니다.

    function _multiply(uint a, uint b) private pure returns (uint) {

      return a * b;

    }


    해당 함수는 a와 b라는 인자값을 받지만, 어떤 데이터도 접근하지 않고 인자값을 단순히 곱해서 리턴을 하는 구조입니다. 


    "view와 pure를 매번 설정을 언제 해!"라고 말할 수 있는데 솔리디티 컴파일러가 경고 메세지를 제공해주기 때문에 코딩을 하다보면, 알아서 제어자를 쉽게 선언할 수 있게 됩니다.



    문제 및 문제풀이


    pragma solidity ^0.4.19;

    contract ZombieFactory {

    uint dnaDigits = 16;
    uint dnaModulus = 10 ** dnaDigits;

    struct Zombie {
    string name;
    uint dna;
    }

    Zombie[] public zombies;

    function _createZombie(string _name, uint _dna) private {
    zombies.push(Zombie(_name, _dna));
    }

    // 여기서 시작

    }


    문제

    스트링으로부터 랜덤 DNA 숫자를 생성하는 도우미 함수가 필요할 걸세.

    _generateRandomDna라는 private 함수를 만드시게. 이 함수는 _str (string형)을 인자로 전달받고, uint을 반환해야 하네.

    이 함수는 컨트랙트 변수를 보지만 변경하지는 않을 것이므로 view로 선언하게.

    이 함수의 내용은 현재로서는 비어 있는 상태로 냅두시게. 나중에 채울 것이네.



    문제풀이

    // 여기서 시작
    function _generateRandomDna(string _str) private view returns (uint) {
    }



    크립토좀비 원본 링크



    댓글

    Designed by JB FACTORY