Solidity – Function

Sama seperti function pada bahasa pemograman lainnya function adalah block code yang melakukan tugas tertentu. Perbedaanya terdapat keyword untuk accessibility dari function.

Berikut syntax untuk membuat function.

function nama_fungsi (parameters)
  [internal | external | private | public]
  [pure | constant | view | payable]
  [modifiers]
  [returns(return_types)]
{
  //code goes here
}

Untuk parameters, mirip dengan bahasa java. Berikut contoh penulisan parameter yang valid.

string name;

function setName(string _name){
  name = _name;
}

Accessbility

  • internal: hanya dapat diakses didalam contract atau contract turunan.
  • private : hanya dapat diakses didalam contract.
  • public : tidak ada batasan akses.
  • external: hanya dapat diakses dari luar contract, kecuali digunakan keyword this.

Returns Value

Untuk menuliskan return value ada dua pendekatan.

Menuliskan type data.

string name;

function getName()
   returns(string)
{
  return name;
}

Menuliskan type data dan return value. Pada body function, tidak perlu digunakan keyword return.

string name;

function getName()
   returns(string _name)
{
   _name = name;
}

constant / view

constant artinya fungsi tidak mengubah nilai state. Jadi fungsi diatas harus ditulis seperti berikut.

Dapat menggunakan keyword constant atau view. Karena tidak melakukan perubahan state, maka fungsi constant tidak memerlukan gas.

string name;

function getName()
   constant
   returns(string)
{
  return name;
}

pure

pure function tidak mengubah atau membaca state. Sama seperti fungsi pada bahasa programming lainnya. pure function adalah fungsi yang self contained.

Contoh, fungsi untuk melakukan perhitungan suatu nilai.

function f(uint a, uint b)
  pure
  returns (uint)
{
  return a * (b + 10);
}

payable

Function yang menangani ether harus menggunakan keyword payable.

Function yang menangani ether tapi tidak ditandai sebagai payable akan menyebabkan error.

uint balance;

function deposit()
  public
  payable
{
  balance += msg.value;
}

Function Modifiers

Modifiers ada block code yang dapat dijalankan sebelum atau sesudah sebuah function call.

Modifiers berguna untuk memodifikasi behaviour sebuah fungsi, contoh:

  • Mengatur akses terhadap suatu fungsi.
  • Validasi input
  • Mencegah hack

Untuk membuat modifier digunakan syntax

modifier nama_modifier{
   // _;
   // code goes here
   // _;
}

Tanda underscore “_” berguna untuk mengatur kapan modifier dijalankan.

  • Diakhir modifier, fungsi akan dijalankan setelah modifier.
  • Diawal modifier, fungsi akan dijalankan sebelum modifier.

Berikut contoh modifier onlyOwner, yang digunakan untuk restrict access fungsi setName. Hanya owner yang dapat menjalankan fungsi setName

string name;
address owner;

modifier onlyOwner {
   require(msg.sender == owner);
    _;
}

function setName()
   onlyOwner
{

   return name;
}

Overload Function

Overload function berarti kita bisa memiliki beberapa fungsi dengan nama yang sama, namum berbeda parameter.

Overload function juga dapat dilakukan untuk fungsi yang diturunkan. Fungsi pada child contract akan meng-override parent contract.

Contoh overloading function

function f(uint _i)
   pure
   returns (uint out)
{
   out = 1;
}

function f(uint _i, bytes32 _key)
   pure
   returns (uint out)
{
   out = 2;
}

Sharing is caring:

Leave a Comment