Dizi dilimleri, array slices, bir dizinin elemanlarını parçalamamızı ve sonrasında erişebilmemizi sağlayan bir görünümdür. Bir dizinin içerisinden başlangıç ve bitiş sıralarına (index) bakarak belirli aralıkları almamıza ve yeni bir dizi oluşturmamıza imkan verir.
arrays = [1,2,3,4,5]; # [0,2) 0.index dahil ama 2. indeks değil arraySlices = arrays[0:2]; # Sonuç: [1,2] print(arraySlices); arrays1 = ["a", "b", "c","d","e"]; # [2,3) 2.indeks dahil ama 3.indeks değil arraySlices1 = arrays1[2:3]; # Sonuç: [c] print(arraySlices1);
const hayvanIsimleri = ["Kedi", "Köpek", "Kuş", "At", "Balık"]; // [2,4) const ilkIkiHayvan = hayvanIsimleri.slice(2, 4); console.log(ilkIkiHayvan); // Sonuç: => ["Kuş", "At"]
Solidity programlama dilinde de dizi dilimleri (array slices) aynı görevde kullanılmaktadır. start
ve end
değerlerinin arasına :
koyularak array[start:end]
şeklinde kullanılmaktadır. start
ve end
dizinin indeksini belirttiğinden dolayı uint256 türündedir.
Solidity'de dizi dilimlemede (array slices) önemli bazı noktalar şunlardır:
end
değeristart
değerinden büyük olamaz. Aksi taktirde hata fırlatılır.
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.12; contract ArraySlices{ function getArraySlices(uint256[] calldata array) public returns(uint256[] memory){ return array[5:2]; // Sonuç: => Hata döner. Bu kullanım sonucunda işlem hata fırlatacaktır. }
- 2022 Ağustos itibariyle Solidity'de yalnızca
calldata
veri konumundaki dinamik dizilerde dilimleme (array slicing) yapılabilir. İleri tarihlerde gelen güncellemelerle değişebilir.
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.12; // Dizi Dilimleri ve Solidity contract ArraySlices{ uint256[] public arrays = [1,2,3,4]; function getArraySlices(uint256 start, uint256 end) public returns(uint256[] memory){ //return arrays[start:end]; // Sonuç: => Hata döner. TypeError: Index range access is only supported for dynamic calldata arrays. } } contract ArraySlices1{ function getArraySlices(uint256[] calldata array) public returns(uint256[] memory){ return array[0:2]; // Sonuç: => uint256[]: 1,2" } } contract ArraySlices2{ function getArraySlices(bytes1[] calldata array) public returns(bytes1[] memory){ return array[0:2]; // Sonuç: => uint256[]: 1,2" } // function getArraySlices1(bytes[] calldata array) public returns(bytes[] memory){ // return array[0:2]; // Sonuç: => Hata döner. Index range access is not supported for arrays with dynamically encoded base types. // } // function getArraySlices1(bytes1[5] calldata array) public returns(bytes1[] memory){ // return array[0:2]; // Sonuç: => Hata döner. Index range access is only supported for dynamic calldata arrays. //
- Varsayılan olarak
start
değeri 0 ikenend
değeri dizinin uzunluğuna eşittir. - Dizi diliminin ilk elemanı
array[start]
iken son elemanıarray[end-1]
'dir. Yania = [1,2,3,4]
dizisinden alınana[0:3]
dizi diliminde ilk elemana[0] = 1
iken son elemana[3-1] = a[2] = 3
olacaktır.a[0:3]
dizi dilimi[1,2,3]
olacaktır. Buradaki eşitlikleri temsili olarak verdiğimi unutmayınız.
Dizi dilimlerine (array slices) dair aktarmak istediğim bilgiler bunlardı. İlerleyen zamanlarda Solidity zincirine yeni örnekler eklemeyi planlıyorum. Takipte kalın.
Yorumunu Bırak
Yorumlar
0 Yorum yokHenüz yorum yapılmamış. İlk yorum yapan sen ol.