Oke, saya mau merekam
satu video terakhir hari ini
Saya baru terpikir ini ketika membuat video tentang bagaimana objek berkomunikasi antara satu dengan lainnya
Ada prinsip penting tentang
bagaimana variabel dilewatkan sebagai argumen ke fungsi lainnya
yang belum disampaikan
di video-video sebelumnya
Jadi, saya pikir saya tidak punya contoh untuk ini
Saya hanya akan diag...
Sampaikan kepada Anda melalui ini dan memperlihatkan susunannya
dan kita akan lihat apa yang belum dibahas dan apa yang perlu ditambahkan dan apa yang membingungkan
Saya akan mengarang suatu fungsi konyol
suatu fungsi yang tidak ada gunanya
Saya akan menyebutnya
"change" (ubah)
dan (fungsi) ini akan menerima
suatu angka (val) sebagai argumennya
dan di dalam fungsi ini
val = val x 2
oke, jadi fungsi ini menerima suatu angka
dan mengkalikan angka tersebut dengan dua
dan menyimpan hasilnya di dirinya sendiri (val)
Jadi, kalau saya bilang "int x"
Kamu bisa lihat tidak?
Tidak. Saya tulis lebih rendah deh.
"int x = 50"
lalu saya bilang "change(x)"
lalu saya bilang "println(x)"
Apa hasil dari "println" ini?
Yuk pikirkan ini
Nilai "x" adalah 50
"change(x)" artinya
(nilai) x masuk ke "val"
jadi sekarang nilai "val" adalah 50
lalu "val = val x 2"
jadi sekarang "val" nilainya 100
tapi ketika saya cetak "x",
apakah saya akan lihat "100" atau "50"?
Pikirkan itu
sebagai desainer bahasa pemrograman,
terserah kamu memutuskan ini harusnya gimana
Bahasa pemrograman Java,
yang mana Processing dibangun di atasnya,
Yang akan kita lihat adalah angka 50.
Kenapa? Ini dikenal sebagai "pass by copy"
(melewatkan argumen dengan menyalin nilai)
Saat kau melewatkan suatu nilai primitif:
angka, integer, float, dan sebagainya
ke suatu fungsi
kau melewatkan salinan dari nilai tersebut
artinya, dalam memori komputer,
"x" mereferensikan suatu tempat
di memori dengan nilai 50
lalu "val" mereferensikan tempat lain
di memori komputer dengan apa?
nilai 50 disalin ke sana
lalu di sini, "val" dikalikan 2
"val" sekarang nilainya 100
tapi "x", yang menunjuk ke 50,
tidak terpengaruh
"Pass by Copy"
(melewatkan argumen dengan salinan nilai)
Alasan kenapa saya bahas ini dan
sadar bahwa ini sangat penting
Jika kau melewatkan suatu objek ke fungsi,
cara kerjanya tidak seperti ini.
Cara kerjanya disebut
"Pass by Reference"
Kita anggap ada objek Particle buatan,
di mana objek Particle itu cuma punya "x" dan "y"
Jadi "Particle p = new Particle(50, 100);"
lalu saya bilang "change(p);"
lalu ada fungsi yang disebut "void change"
yang menerima objek Particle, yang disebut
"blah". Cuma butuh nama variabel
yang berbeda. (nama) ini jelek.
ah... sebal saya buat nama variabel "blah"
mari pikirkan sesuatu...
saya mau menyebutnya "aP"
"a Particle". "aP"
kalau saya bilang "aP.x = 300;"
Apa yang terjadi?
oke, jadi (bagian) ini setara dengan
"int x = 50; change(x);"
sekarang saya nyatakan
"Particle p = new Particle; change(p);"
fungsi "change()" ini,
alih-alih mengkalikan dengan 2,
saya set nilainya jadi 300
dan ingat sebelumnya bahwa x = 50
dan y = 100
Jadi, di sini saya punya partikel p
dan "p" menunjuk ke suatu tempat
di memori komputer
di mana "50" dan "100" disimpan
sekarang di sini saya buat partikel baru
namanya "aP"
-
Saya tidak membuat objek baru.
Saat kau melewatkan objek ke suatu fungsi,
kau memberikan referensinya
Lokasi data dalam memori,
bukan salinan datanya.
Jadi, "aP" sebenarnya menunjuk ke sini...
dan jika saya mengubah aspek, parameter,
data objek tersebut
misal "x" jadi "300".
Saya mengubah variabel asalnya juga.
"Pass by Reference"
(mengoper dengan referensi)
Jadi, di Java
saat kau mengoper nilai primitif
ke suatu fungsi, sebagai argumennya,
kau membuat salinannya dan
variabel aslinya tidak terpengaruh
ketika kau melewatkan objek
ke suatu fungsi,
kau hanya kirim referensinya saja
dan jika kau ubah objeknya di fungsi itu,
ini juga akan berubah
Izinkan saya menunjukkan skenario
di mana hal ini penting
Jadi, kalau kita kembali ke sini...
... Ini adalah contoh di mana saya cuma
mengganti warna latar belakangnya...
Jadi saya akan simpan ini sebagai "ver_2"
saya cuma mau buat suatu fungsi
yang dipanggil "p1.overlaps(p2)"
dan ini tidak akan mengembalikan
"true" atau "false" lagi
oke, dan di fungsi tersebut,
ini hanya void
ini akan mengerjakan sesuatu
jika mereka overlap
dan apa yang akan saya lakukan?
saya akan beri partikelnya dengan "color"
(warna)
dan warnanya akan menjadi
hitam pada awalnya
dan isi dengan warna itu
dan ketika ini tumpang-tindih,
"other.col" menjadi merah
jika tidak, "other.col" sama dengan hitam
Jadi, saya tahu
saya melakukan ini dengan cepat
mungkin kamu bisa mengikuti atau tidak...
Tapi izinkan saya menunjukkan
kenapa ini SANGAT PENTING
Perhatikan saat mereka tumpang-tindih,
partikel ini akan berubah warnanya
Saya melewatkan p2 ke fungsi tersebut
Salinan tidak dibuat
Saya memberikan
referensi ke objek sebenarnya
dan "p2", referensi ke objek tersebut,
masuk ke "other"
Dan sekarang saya mengubah
nilai dari "other".
Jika saya mengubah nilai "other", artinya
saya sebenarnya mengubah nilai "p2"
dan sekarang "p2" menjadi merah.
Saya juga bisa bilang...
warna objek ini adalah hijau
saya beri masing-masing suatu alfa kecil
Jadi jika kita perhatikan sekarang,
kamu bisa lihat sekarang...
Keduanya hitam...
Satu berubah hijau, satu berubah merah...
Satu berubah hijau, satu berubah merah...
Hal lain yang perlu diperhatikan adalah
sepertinya di versi program aslinya
(sebelumnya),
p1 overlap p2 adalah sama dengan
p2 overlap p1.
Tapi sekarang kalau saya ubah itu,
karena saya beri p2 ke fungsi itu,
p2 berubah hijau dan satunya jadi merah.
Jadi, ada banyak yang asal-asalan
dalam contoh buatan ini
Tapi saya pikir ini penting untuk disadari
bahwa jika kamu mengirimkan
objek ini ke suatu fungsi, kamu bisa
ubah objek itu dalam fungsi itu sendiri
oke, jadi saya tidak tahu apakah ini bisa
membuatmu lebih paham atau makin bingung
Saya pikir saya sudah sampaikan
di video terakhir
Tapi saya hari ini hanya merangkum semua
video dan coba buat konten kecil ekstra
Video ini cuma 7 menit,
yang mana tidak terlalu buruk
oke, sampai jumpa