Modul, fungsi dan prosedur
Domain Modul, fungsi dan prosedur menguji cara memecahkan atur cara besar kepada unit kecil yang boleh diguna semula, serta cara data dihantar masuk dan keluar daripada unit tersebut. Soalan lazim meminta anda menentukan nilai pemboleh ubah pemanggil selepas satu modul dipanggil, atau memilih sama ada sesuatu tugas patut ditulis sebagai fungsi atau prosedur.
Sebab modulariti
Atur cara dipecahkan kepada modul supaya lebih mudah dibaca, diuji secara berasingan, digunakan semula dalam atur cara lain, dan dikerjakan serentak oleh beberapa pengaturcara.
Fungsi dan prosedur
- Fungsi mengembalikan satu nilai melalui
returndan boleh digunakan dalam ungkapan, contohnyapurata = kira_purata(6, 10). - Prosedur melaksanakan tindakan (cetak, kemas kini, tulis fail) tanpa nilai pulangan; dipanggil sebagai penyataan tersendiri.
- Kedua-duanya mempunyai nama, senarai parameter, dan badan; parameter dipadankan mengikut urutan dan jenis.
Penghantaran parameter
- By value: salinan nilai dihantar; perubahan dalam modul tidak menjejaskan pemboleh ubah pemanggil.
- By reference: alamat dihantar; perubahan dalam modul mengubah pemboleh ubah pemanggil.
Skop
Pemboleh ubah lokal hanya wujud dalam modul dan hilang selepas modul tamat. Pemboleh ubah global boleh dibaca di mana-mana, tetapi meningkatkan risiko perubahan tidak dijangka dan patut dielakkan.
Contoh berperingkat
procedure tambah_satu(ref x)
x = x + 1
endprocedure
n = 5
tambah_satu(n)
Parameter dihantar by reference, jadi perubahan pada x ialah perubahan pada n yang sama: selepas panggilan, n = 6. Jika tajuk prosedur ditulis (x) tanpa ref, penghantaran adalah by value, x menjadi 6 di dalam prosedur tetapi n kekal 5. Perhatikan perbezaan satu perkataan ini menentukan jawapan.
Perangkap yang menghilangkan markah
- Menganggap
printdalam fungsi sama denganreturn; cetakan tidak memulangkan nilai. - Terlupa bahawa by value tidak mengubah pemboleh ubah pemanggil.
- Menghantar argumen dalam urutan salah apabila dua parameter mempunyai jenis sama.
- Pemboleh ubah lokal menutupi (shadow) pemboleh ubah global dengan nama sama.
- Menggunakan prosedur dalam ungkapan seperti
y = prosedur_saya()sedangkan ia tiada nilai pulangan. - Rekursi tanpa kes asas → rekursi tak terhingga.