Skop (scope) menerangkan di mana dalam program sesuatu pemboleh ubah boleh digunakan. Pemboleh ubah global (global variable) milik atur cara utama. Pemboleh ubah setempat (local variable) milik satu subrutin dan berhenti wujud apabila subrutin itu tamat.
Pelajaran ini berada dalam modul struktur pengaturcaraan. Ia bersambung daripada memilih jenis data dan menyediakan anda untuk membina subrutin. Soalan peperiksaan meminta anda menyatakan sama ada pemboleh ubah setempat atau global, menjejak program yang menggunakan kedua-duanya, atau menerangkan mengapa pemboleh ubah setempat ialah amalan yang baik.
Bagaimana saya membezakan setempat daripada global?
Lihat di mana pemboleh ubah itu diisytiharkan.
- Diisytiharkan dalam atur cara utama, di luar semua subrutin: global. Setiap bahagian program boleh membaca dan mengubahnya.
- Diisytiharkan dalam subrutin: setempat. Hanya subrutin itu boleh menggunakannya, dan ia dicipta baharu setiap kali subrutin dipanggil.
- Parameter dalam kurungan subrutin juga bertindak sebagai pemboleh ubah setempat bagi subrutin itu.
Bayangkan papan putih di bilik darjah (global) dan sehelai halaman buku nota anda sendiri (setempat). Sesiapa boleh menulis pada papan putih. Hanya anda menggunakan halaman buku nota anda, dan halaman baharu dimulakan bagi setiap pelajaran.
Contoh berlangkah
Jejak program ini dan nyatakan outputnya.
DECLARE Total : INTEGER
Total ← 0
PROCEDURE AddPoints(Points : INTEGER)
DECLARE Bonus : INTEGER
Bonus ← 5
Total ← Total + Points + Bonus
ENDPROCEDURE
CALL AddPoints(10)
CALL AddPoints(20)
OUTPUT Total
Di sini Total ialah global. Points dan Bonus ialah setempat bagi AddPoints.
| Langkah | Points | Bonus | Total |
|---|---|---|---|
| Mula | belum dicipta | belum dicipta | 0 |
| CALL AddPoints(10) | 10 | 5 | 0 + 10 + 5 = 15 |
| CALL AddPoints(20) | 20 | 5 | 15 + 20 + 5 = 40 |
| Selepas panggilan | hilang | hilang | 40 |
Outputnya ialah 40. Bonus dicipta semula pada setiap panggilan, jadi panggilan kedua bermula dengan Bonus baharu bernilai 5, bukan nilai tinggalan. Total kekal kerana ia global.
Kesilapan manakah yang paling kerap berlaku?
Jawapan salah: menambah
OUTPUT Bonusdi hujung program, selepas dua panggilan itu.Ini ialah ralat.
Bonussetempat bagiAddPointsdan tidak lagi wujud selepas prosedur tamat. Atur cara utama tidak dapat melihatnya.
Terdapat dua cara yang betul untuk mengeluarkan nilai daripada subrutin. Keluarkan (output) di dalam subrutin, atau minta fungsi memulangkannya. Pemulangan dibincangkan dalam menjejak nilai yang dipulangkan.
Kesilapan kedua ialah menyangka pemboleh ubah setempat yang senama dengan yang global mengubah yang global. Jika prosedur mengisytiharkan Total sendiri, Total global tidak disentuh.
Semakan kendiri
1. Dalam contoh di atas, nyatakan pemboleh ubah mana yang setempat dan mana yang global.
Tunjukkan jawapan
Global: Total. Setempat bagi AddPoints: Points dan Bonus.
2. Nyatakan outputnya.
X ← 3
PROCEDURE Test()
DECLARE X : INTEGER
X ← 8
ENDPROCEDURE
CALL Test()
OUTPUT X
Tunjukkan jawapan
Prosedur mengisytiharkan X setempatnya sendiri, ditetapkan kepada 8. X global tidak pernah diubah, jadi atur cara utama mengeluarkan 3.
3. Berikan satu sebab pengaturcara lebih suka pemboleh ubah setempat.
Tunjukkan jawapan
Pemboleh ubah setempat tidak boleh diubah secara tidak sengaja dari bahagian lain program, jadi ralat lebih mudah dikesan. Sebab lain yang sah: nama yang sama boleh digunakan semula dalam subrutin berbeza tanpa berlanggar.
Ke mana pelajaran ini membawa?
Skop memberitahu anda apa yang boleh dilihat oleh subrutin. Seterusnya, bina subrutin dengan parameter yang jelas supaya ia menerima apa yang diperlukan dan bukan mencapai pemboleh ubah global. Gunakan pelatih jejak pseudokod terhad untuk berlatih mengisi jadual di atas, kemudian semak logik yang sama dalam kotak pasir penaakulan Python yang selamat.
Jika anda mahu seseorang memerhati penjejakan anda dan menghentikan anda pada baris salah yang pertama, itulah gunanya tuisyen Computer Science dalam talian satu dengan satu.