Skip to content

Latest commit

 

History

History
162 lines (126 loc) · 5.13 KB

12-multiplereturns.md

File metadata and controls

162 lines (126 loc) · 5.13 KB
title actions material
Çoklu Değişken Getirme Kullanımı
cevapKontrol
ipuçları
editor
language startingCode answer
sol
zombiefeeding.sol zombiefactory.sol
pragma solidity ^0.4.19; import "./zombiefactory.sol"; contract KittyInterface { function getKitty(uint256 _id) external view returns ( bool isGestating, bool isReady, uint256 cooldownIndex, uint256 nextActionAt, uint256 siringWithId, uint256 birthTime, uint256 matronId, uint256 sireId, uint256 generation, uint256 genes ); } contract ZombieFeeding is ZombieFactory { address ckAddress = 0x06012c8cf97BEaD5deAe237070F9587f8E7A266d; KittyInterface kittyContract = KittyInterface(ckAddress); function feedAndMultiply(uint _zombieId, uint _targetDna) public { require(msg.sender == zombieToOwner[_zombieId]); Zombie storage myZombie = zombies[_zombieId]; _targetDna = _targetDna % dnaModulus; uint newDna = (myZombie.dna + _targetDna) / 2; _createZombie("NoName", newDna); } // define function here }
pragma solidity ^0.4.19; contract ZombieFactory { event NewZombie(uint zombieId, string name, uint dna); uint dnaDigits = 16; uint dnaModulus = 10 ** dnaDigits; struct Zombie { string name; uint dna; } Zombie[] public zombies; mapping (uint => address) public zombieToOwner; mapping (address => uint) ownerZombieCount; function _createZombie(string _name, uint _dna) internal { uint id = zombies.push(Zombie(_name, _dna)) - 1; zombieToOwner[id] = msg.sender; ownerZombieCount[msg.sender]++; NewZombie(id, _name, _dna); } function _generateRandomDna(string _str) private view returns (uint) { uint rand = uint(keccak256(_str)); return rand % dnaModulus; } function createRandomZombie(string _name) public { require(ownerZombieCount[msg.sender] == 0); uint randDna = _generateRandomDna(_name); _createZombie(_name, randDna); } }
pragma solidity ^0.4.19; import "./zombiefactory.sol"; contract KittyInterface { function getKitty(uint256 _id) external view returns ( bool isGestating, bool isReady, uint256 cooldownIndex, uint256 nextActionAt, uint256 siringWithId, uint256 birthTime, uint256 matronId, uint256 sireId, uint256 generation, uint256 genes ); } contract ZombieFeeding is ZombieFactory { address ckAddress = 0x06012c8cf97BEaD5deAe237070F9587f8E7A266d; KittyInterface kittyContract = KittyInterface(ckAddress); function feedAndMultiply(uint _zombieId, uint _targetDna) public { require(msg.sender == zombieToOwner[_zombieId]); Zombie storage myZombie = zombies[_zombieId]; _targetDna = _targetDna % dnaModulus; uint newDna = (myZombie.dna + _targetDna) / 2; _createZombie("NoName", newDna); } function feedOnKitty(uint _zombieId, uint _kittyId) public { uint kittyDna; (,,,,,,,,,kittyDna) = kittyContract.getKitty(_kittyId); feedAndMultiply(_zombieId, kittyDna); } }

Bu getKitty fonksiyonu çoklu değişkenlerin getirilmesini gördüğümüz ilk örnek. Nasıl kullanıldığına bir bakalım:

function multipleReturns() internal returns(uint a, uint b, uint c) {
  return (1, 2, 3);
}

function processMultipleReturns() external {
  uint a;
  uint b;
  uint c;
  // This is how you do multiple assignment:
  (a, b, c) = multipleReturns();
}

// Or if we only cared about one of the values:
function getLastReturnValue() external {
  uint c;
  // We can just leave the other fields blank:
  (,,c) = multipleReturns();
}

Teste koy

CryptoKitties kontrat ile etkileşim zamanı!

Kontrattan kitty genlerini alan bir fonksiyon yapalım:

  1. feedOnKitty denilen bir fonksiyon yapın. 2 uint parametresi alacak, _zombieId ve _kittyId ve bir public fonksiyon olması lazım.

  2. Fonksiyon ilk olarak kittyDna isimli bir uint ifade etmeli.

Dikkat: KittyInterface'mizde, genes bir uint256'dir — fakat ders 1'de hatırlarsanız, uint uint256 için bir takma isimdir — onlar aynı şeydir.

  1. Fonksiyon daha sonra _kittyId ile kittyContract.getKitty fonksiyonunu çağırmalı ve genesi kittyDna'da depolamalı. Hatırlayın — getKitty defalarca değişken getirir. (Tam olarak 10 — İyiyim, senin için saydım!). Fakat önemsediğimiz sonuncusu, genes. Virgüllerini dikkatli say!

  2. Son olarak, fonksiyon feedAndMultiply'i çağırmalı ve _zombieId ve kittyDnanın ikisine de geçmeli.