Terus ke kandungan
IGCSE·Tuition
Sains Komputer · Pelajaran

Terangkan skop setempat dan global

Satu pemboleh ubah berfungsi dengan baik di satu bahagian program, kemudian seolah-olah lenyap di bahagian lain.

Dalam halaman ini
  1. Bagaimana saya membezakan setempat daripada global?
  2. Contoh berlangkah
  3. Kesilapan manakah yang paling kerap berlaku?
  4. Semakan kendiri
  5. Ke mana pelajaran ini membawa?

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.

LangkahPointsBonusTotal
Mulabelum diciptabelum dicipta0
CALL AddPoints(10)1050 + 10 + 5 = 15
CALL AddPoints(20)20515 + 20 + 5 = 40
Selepas panggilanhilanghilang40

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 Bonus di hujung program, selepas dua panggilan itu.

Ini ialah ralat. Bonus setempat bagi AddPoints dan 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.

Soalan lazim

Apakah beza pemboleh ubah setempat dengan global?

Pemboleh ubah global diisytiharkan dalam atur cara utama dan boleh digunakan di seluruhnya, termasuk dalam subrutin. Pemboleh ubah setempat diisytiharkan dalam subrutin dan wujud hanya semasa subrutin itu berjalan. Di luarnya, nama itu tidak boleh digunakan. Semak cara sukatan tahun peperiksaan anda menyatakannya.

Mengapa pemboleh ubah setempat lebih digalakkan?

Pemboleh ubah setempat tidak boleh diubah secara tidak sengaja dari bahagian lain program, jadi pepijat lebih mudah dikesan. Dua subrutin juga boleh menggunakan nama yang sama tanpa berlanggar. Program dengan lebih sedikit pemboleh ubah global lebih mudah dibaca, diuji dan digunakan semula.

Apa berlaku jika pemboleh ubah setempat dan global mempunyai nama yang sama?

Dalam subrutin, pemboleh ubah setempat yang digunakan, dan yang global tidak berubah. Keduanya ialah dua pemboleh ubah berasingan yang kebetulan berkongsi nama. Ini soalan jejak yang lazim, jadi tulis kedua-dua nilai secara berasingan.

Dikemas kini:

Langkah seterusnya

Jika soalan skop terasa seperti meneka pemboleh ubah mana yang kekal, guru satu dengan satu boleh menjejak program pendek bersama anda dan menandakan dengan tepat di mana setiap pemboleh ubah dicipta dan di mana ia berhenti wujud.

Kelas percubaan berbayar satu jam pada kadar guru yang disahkan, bermula RM80. Yuran lain, jadual dan susunan seterusnya disahkan terus bersama guru selepas kelas percubaan.

Tuisyen diatur bersama ibu bapa atau penjaga. Hantar halaman ini kepada mereka melalui WhatsApp supaya mereka boleh bertanya bagi pihak anda.

Ibu bapa atau penjaga? Tanya di sini

9,000+ pelajar telah dibantu melalui perkhidmatan kami