Parametre Serbestliği Çözümleri
hesaplaişlevinin belirsiz sayıdaHesapnesnesi alabilmesi için parametre listesininHesap[] ...şeklinde tanımlanması gerekir:
double[] hesapla(Hesap[] hesaplar ...) { double[] sonuçlar; foreach (hesap; hesaplar) { final switch (hesap.işlem) { case İşlem.Toplama: sonuçlar ~= hesap.birinci + hesap.ikinci; break; case İşlem.Çıkarma: sonuçlar ~= hesap.birinci - hesap.ikinci; break; case İşlem.Çarpma: sonuçlar ~= hesap.birinci * hesap.ikinci; break; case İşlem.Bölme: sonuçlar ~= hesap.birinci / hesap.ikinci; break; } } return sonuçlar; }
İşleve gönderilen bütün parametre değerleri hesaplar dizisinde bulunur. Bütün hesap nesnelerini bir döngüde teker teker kullanarak sonuçları da bir double dizisine yerleştiriyoruz ve işlevin sonucu olarak döndürüyoruz.
Bütün program:
import std.stdio; enum İşlem { Toplama, Çıkarma, Çarpma, Bölme } struct Hesap { İşlem işlem; double birinci; double ikinci; } double[] hesapla(Hesap[] hesaplar ...) { double[] sonuçlar; foreach (hesap; hesaplar) { final switch (hesap.işlem) { case İşlem.Toplama: sonuçlar ~= hesap.birinci + hesap.ikinci; break; case İşlem.Çıkarma: sonuçlar ~= hesap.birinci - hesap.ikinci; break; case İşlem.Çarpma: sonuçlar ~= hesap.birinci * hesap.ikinci; break; case İşlem.Bölme: sonuçlar ~= hesap.birinci / hesap.ikinci; break; } } return sonuçlar; } void main() { writeln(hesapla(Hesap(İşlem.Toplama, 1.1, 2.2), Hesap(İşlem.Çıkarma, 3.3, 4.4), Hesap(İşlem.Çarpma, 5.5, 6.6), Hesap(İşlem.Bölme, 7.7, 8.8))); }
Çıktısı:
[3.3, -1.1, 36.3, 0.875]