-
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