D - Pemrograman Kontrak

Pemrograman kontrak dalam pemrograman D difokuskan pada penyediaan cara penanganan kesalahan yang sederhana dan dapat dimengerti. Pemrograman kontrak di D diimplementasikan oleh tiga jenis blok kode -

  • blok tubuh
  • di blok
  • keluar blok

Body Block di D

Blok tubuh berisi kode fungsionalitas eksekusi yang sebenarnya. Blok masuk dan keluar bersifat opsional sedangkan blok badan bersifat wajib. Sintaks sederhana ditampilkan di bawah ini.

return_type function_name(function_params) 
in { 
   // in block 
} 

out (result) { 
   // in block 
}
 
body { 
   // actual function block 
}

Di Blokir untuk Kondisi Awal di D

Dalam blok adalah untuk kondisi awal sederhana yang memverifikasi apakah parameter masukan dapat diterima dan dalam jangkauan yang dapat ditangani oleh kode. Manfaat dari blok in adalah bahwa semua kondisi entri dapat disimpan bersama dan terpisah dari badan fungsi yang sebenarnya. Prasyarat sederhana untuk memvalidasi kata sandi untuk panjang minimumnya ditunjukkan di bawah ini.

import std.stdio; 
import std.string;
  
bool isValid(string password) 
in { 
   assert(password.length>=5); 
}
 
body { 
   // other conditions 
   return true; 
}
  
void main() { 
   writeln(isValid("password")); 
}

Ketika kode di atas dikompilasi dan dijalankan, ia membaca file yang dibuat di bagian sebelumnya dan menghasilkan hasil sebagai berikut -

true

Blok Keluar untuk Kondisi Pos di D

Blok keluar menangani nilai yang dikembalikan dari fungsi. Ini memvalidasi nilai kembali dalam kisaran yang diharapkan. Contoh sederhana yang berisi baik masuk dan keluar ditunjukkan di bawah ini yang mengubah bulan, tahun ke bentuk usia desimal gabungan.

import std.stdio;
import std.string;

double getAge(double months,double years) 
in { 
   assert(months >= 0); 
   assert(months <= 12); 
}
 
out (result) { 
   assert(result>=years); 
} 

body { 
   return years + months/12; 
} 
 
void main () { 
   writeln(getAge(10,12)); 
}

Ketika kode di atas dikompilasi dan dijalankan, ia membaca file yang dibuat di bagian sebelumnya dan menghasilkan hasil sebagai berikut -

12.8333