Alih-alih fungsi , mulailah dengan subrutin . Beri tahu mereka bahwa sebuah program hanyalah daftar instruksi, sebuah resep untuk memberi tahu komputer bagaimana melakukan sesuatu. Dan itu sedang dijalankan satu demi satu instruksi (dengan kemungkinan untuk membuat beberapa langkah secara paralel, tetapi lebih lanjut tentang itu nanti).
Beberapa tugas cukup umum dan berulang, jadi akan sangat buruk jika kita harus selalu menuliskannya lagi dan lagi, jadi kita menulisnya sekali saja dan membuat "program yang lebih kecil" darinya - sebuah subrutin , yang dapat digunakan kembali oleh bagian lain dari program. Agar dapat menjalankannya lebih dari satu kali, kami memberinya nama yang berarti dalam program kami. Dan kemudian kita dapat menggunakan nama itu ketika kita ingin menjalankan "program kecil" ini sebagai bagian dari yang lebih besar, dengan memanggilnya dengan nama itu.
Memanggil subrutin seperti memanggil iblis yang tahu bagaimana melakukan tugas itu, dengan nama iblis itu. Jadi ketika kita ingin melakukan tugas tertentu dalam program kita, kita menulis "panggil iblis bernama Argoth", dan iblis muncul dan melakukan tugas untuk kita seperti yang kita perintahkan kepadanya untuk dilakukan, dan kemudian pergi dan kita dapat melanjutkan pekerjaan.
Terkadang iblis membutuhkan beberapa informasi tambahan yang tanpanya dia tidak dapat memutuskan tugas mana yang harus dilakukan, atau apa yang sebenarnya kita inginkan darinya. Misalnya jika iblis itu seharusnya membangun sebuah kastil, ia mungkin perlu tahu di mana ia seharusnya membangunnya, atau seberapa besar , dll. Itu adalah argumen yang diberikan kepada iblis ... Maksudku, subrutin, yang sekarang menjadi parametrized .
Parameter adalah potongan-potongan informasi yang hilang, tetapi diperlukan, untuk melakukan tugas. Mereka mengubah apa yang bisa dilakukan subrutin sedikit. Itu seperti slot kosong dalam resep yang perlu diisi sebelum kita bisa menjalankannya.
Argumen , di sisi lain, adalah informasi aktual (nilai) yang kami berikan untuk parameter ini.
Adapun eksekusi paralel, kita bisa memikirkannya dengan cara ini: selalu ada seseorang (atau sesuatu ) yang menjalankan program (daftar instruksi). Entah itu manusia lain (tahukah Anda bahwa "komputer" pernah menjadi nama untuk seseorang yang melakukan perhitungan?), Atau sebuah mesin. Suatu program hanyalah daftar instruksi, tidak bekerja dengan sendirinya. Pasti ada seseorang atau sesuatu yang akan melakukan proses komputasi(lakukan tindakan ini dari daftar). Dan kadang-kadang tindakan ini dapat dilakukan secara paralel - kita dapat mendistribusikan salinan daftar ke beberapa orang dan membiarkan masing-masing dari mereka melakukan serangkaian tugas yang berbeda dari daftar, selama mereka tidak saling mengganggu, atau jangan Saya tidak harus menunggu hasil pekerjaan orang lain. Itu multithreading untuk Anda;)
Adapun perbedaan antara fungsi dan subrutin (juga disebut prosedur ), perbedaan yang biasa adalah bahwa fungsi dipanggil untuk menghitung nilai tertentu yang dikembalikan sebagai hasil dari pelaksanaannya, sementara prosedur dijalankan hanya untuk bersenang-senang;) AKA karena "efek samping" mereka - hanya demi operasi yang dilakukan dari daftar.
Tetapi jika memanggil suatu prosedur atau fungsi menyebabkan beberapa masalah pada awalnya, Anda dapat menggunakan istilah lain yang dulunya populer: melompat . Seseorang dapat melompat ke subrutin, yang berarti bahwa Anda berhenti mengeksekusi apa pun yang Anda lakukan sekarang, dan "melompat" ke tempat lain dalam daftar (atau daftar lain apa pun) - subrutin - untuk melakukan tugasnya. Kemudian, ketika Anda selesai, Anda "melompat kembali" - yaitu, Anda kembali ke tempat Anda telah terganggu, sehingga Anda bisa melanjutkan dengan tugas Anda sebelumnya. Perbedaan antara memanggil dan melompat adalah bahwa sekarang Anda adalah iblis.
Adapun metode yang disebutkan di sini oleh seseorang, atau fakta bahwa beberapa bahasa "tidak memiliki fungsi, hanya metode" - itu tidak sepenuhnya benar, karena metode adalah fungsi! - jenis khusus dari mereka: mereka adalah fungsi yang digunakan untuk mengambil beberapa informasi yang dikemas di dalam suatu objek, atau beroperasi pada mereka. Mereka adalah "metode operasi pada data itu". Nama ini berasal dari paradigma berorientasi objek di mana data tertutup dengan objek dan tidak dapat dioperasikan secara langsung, hanya dengan fungsi khusus yang disebut "metode".
Suatu metode khusus dalam cara lain tertentu: ia harus mengetahui objek tertentu mana yang seharusnya dioperasikan / dipanggil (objek "ini"). Itu sebabnya metode biasanya dihiasi dengan parameter tersembunyi tambahan yang menyimpan informasi tentang objek yang telah dipanggil (pointer "ini"). Ini menyulitkan cara fungsi dipanggil sedikit, tetapi ini merupakan "detail implementasi" yang tidak perlu dipusingkan oleh programmer, asalkan dia tahu apa yang dia lakukan.