Menentukan Kapan dan Di mana Anotasi Berlaku

Ketika anotasi bersyarat, mungkin memerlukan anotasi lain untuk menentukannya kepada penganalisis. Misalnya, jika fungsi memiliki variabel yang dapat sinkron atau asinkron, fungsi berperilaku sebagai berikut: Dalam kasus sinkron itu selalu akhirnya berhasil, tetapi dalam kasus asinkron melaporkan kesalahan jika tidak dapat segera berhasil. Ketika fungsi dipanggil secara sinkron, memeriksa nilai hasil tidak memberikan nilai untuk penganalisis kode karena tidak akan dikembalikan. Namun, ketika fungsi dipanggil secara asinkron dan hasil fungsi tidak diperiksa, kesalahan serius dapat terjadi. Contoh ini menggambarkan situasi di mana Anda dapat menggunakan _When_ anotasi—dijelaskan nanti dalam artikel ini—untuk mengaktifkan pemeriksaan.

Anotasi Struktural

Untuk mengontrol kapan dan di mana anotasi berlaku, gunakan anotasi struktural berikut.

Anotasi Deskripsi
_At_(expr, anno-list) expr adalah ekspresi yang menghasilkan lvalue. Anotasi di anno-list diterapkan ke objek yang dinamai oleh expr. Untuk setiap anotasi dalam , expr ditafsirkan anno-listdalam pra-kondisi jika anotasi ditafsirkan dalam pra-kondisi, dan dalam kondisi pasca-kondisi jika anotasi ditafsirkan dalam pasca-kondisi.
_At_buffer_(expr, iter, elem-count, anno-list) expr adalah ekspresi yang menghasilkan lvalue. Anotasi di anno-list diterapkan ke objek yang dinamai oleh expr. Untuk setiap anotasi dalam , expr ditafsirkan anno-listdalam pra-kondisi jika anotasi ditafsirkan dalam prasyarat, dan dalam kondisi pasca-kondisi jika anotasi ditafsirkan dalam pasca-kondisi.

iter adalah nama variabel yang dilingkup ke anotasi (termasuk anno-list). iter memiliki jenis longimplisit . Variabel bernama identik dalam cakupan penutup apa pun disembunyikan dari evaluasi.

elem-count adalah ekspresi yang mengevaluasi ke bilangan bulat.
_Group_(anno-list) Anotasi di anno-list semua dianggap memiliki kualifikasi yang berlaku untuk anotasi grup yang diterapkan ke setiap anotasi.
_When_(expr, anno-list) expr adalah ekspresi yang dapat dikonversi ke bool. Ketika bukan nol (true), anotasi yang ditentukan di anno-list dianggap berlaku.

Secara default, untuk setiap anotasi dalam , expr ditafsirkan anno-listsebagai menggunakan nilai input jika anotasi adalah prasyarat, dan seperti menggunakan nilai output jika anotasi adalah pasca-kondisi. Untuk mengambil alih default, Anda dapat menggunakan _Old_ intrinsik saat mengevaluasi pasca-kondisi untuk menunjukkan bahwa nilai input harus digunakan. Catatan: Anotasi yang berbeda mungkin diaktifkan sebagai konsekuensi dari penggunaan _When_ jika nilai yang dapat diubah—misalnya, *pLength—terlibat karena hasil expr yang dievaluasi dalam prasyarat mungkin berbeda dari hasil yang dievaluasi dalam kondisi pasca-kondisi.

Baca juga