
Java dan JavaScript bukan hal yang sama! Sekarang Anda tahu rahasia utama para Mason. Pada artikel ini, saya ingin berbagi dengan Anda pemikiran dan pemikiran tentang bahasa JavaScript melalui mata pengembang Java. Saya akan membandingkan struktur data, tipe, fungsi, objek, kelas, dan fitur umum lainnya dari Java dan JavaScript.
Yayasan
JavaScript adalah bahasa scripting yang ditafsirkan untuk menulis skrip. Ini berarti bahwa kode yang Anda tulis akan dieksekusi baris demi baris, dari instruksi ke instruksi, dari skrip ke skrip.
Java adalah bahasa yang dikompilasi, yang berarti bahwa sebelum memulai program Java, kompiler harus menerjemahkan semua kode yang Anda tulis ke dalam kode mesin khusus yang dapat dimengerti untuk
bytecode JVM.
Kerugian untuk pengembang Java yang mulai menulis di JS terkait dengan perbedaan-perbedaan ini adalah sebagai berikut:
- Sebelum memulai kompilasi kode Anda yang ditulis dalam Java, kompiler akan melakukan analisis parsing dan semantik untuk Anda, dan jika ada masalah, akan memberi tahu Anda tentang hal itu. Ternyata Anda memiliki kesempatan untuk mencari tahu tentang kesalahan sebelum meluncurkan aplikasi. Di JS, karena kurangnya kompiler, tidak ada pemeriksaan seperti itu. Dan kesalahan yang Anda lakukan pada saat penulisan kode hanya akan terdeteksi setelah skrip diluncurkan.
- Ketidaknyamanan berikut hanya mungkin untuk versi JS sebelum ES5. Karena JavaScript dieksekusi baris demi baris gaya fungsi menulis yang memanggil fungsi lain akan berbeda dari prinsip-prinsip kode murni "paman" Bob , diberitakan untuk program menulis di Jawa. Di JS, jika Anda perlu memanggil fungsi bar () dari fungsi foo () , Anda harus mendefinisikan bar () sebelum foo () . Jika Anda melakukan yang sebaliknya, seperti pada aplikasi Java, maka panggilan tersebut mungkin gagal di beberapa browser lama.
Variabel dan tipenya
JavaScript adalah bahasa yang diketik dengan lemah, tidak seperti Java. Di satu sisi, itu memberi lebih banyak fleksibilitas, di sisi lain - lebih banyak peluang untuk melepaskan tembakan di kaki. Untuk mendeklarasikan variabel dalam JS, cukup menggunakan kata kunci
var , setelah itu mengindikasikan nama variabel dan, jika perlu, nilainya. Dalam praktiknya, bahkan tidak perlu menggunakan kata kunci
var .
var name_1 = "Igor Ivanovich"; name_2 = "Renat Raphaelevich";
Sekarang tentang jenisnya. Di JS, tidak ada tipe yang berbeda untuk bilangan bulat dan angka floating point. Mereka digabungkan dalam
nomor jenis.
String ,
boolean sama dengan di Jawa. JS memiliki tipe
Object . Jika di Jawa itu adalah superclass dari semua kelas, maka di JS itu hanya salah satu dari jenisnya.
var a_number = 10;
Pengembang Java tidak perlu bingung. Sekarang mari kita coba melakukan operasi antara objek dari berbagai jenis dan melihat apa yang terjadi.
10 +1 > 11 10 +"1" > "101" true && false > false true && 1 > 1 true && 0 > 0 true && "1" > "1" false && "1" > false false && 0 > false 0.1 + 0.7 > 0.7999999999999999
Beberapa hasil mungkin sedikit membingungkan pengembang Java. Misalnya, kemampuan untuk menggunakan tipe
boolean dengan cara ini:
true && 1 dan pada saat yang sama mendapatkan semacam hasil. Di Jawa tidak mungkin untuk melakukan operasi seperti itu sejak kompiler akan memberikan kesalahan yang mengatakan bahwa Anda tidak dapat menggunakan operator && dengan tipe selain
boolean . Sekarang mari kita perhatikan perbedaan lain antara JS dan Java:
operator === dan
! == . Ini adalah operasi perbandingan yang dibutuhkan oleh bahasa yang diketik dengan lemah seperti JS.
=== - akan mengembalikan true jika objek yang dibandingkan memiliki nilai yang sama dan tipenya bertepatan.
! == , masing-masing, akan mengembalikan true jika objek yang dibandingkan nilainya tidak sama atau tipenya tidak cocok. Mari kita lihat beberapa contoh:
10 == 10 > true 10 == "10" > true 10 === "10" > false 10 != "10" > false 10 !== "10" > true 10 !== 10 > false
Fungsi
Di JS, dan juga di Jawa, fungsi dapat mengembalikan / tidak mengembalikan nilai, dengan atau tanpa argumen. Anda dapat memanggil fungsi keduanya dalam kode JS, seperti yang ditunjukkan pada contoh di atas, dan dengan merespons peristiwa tertentu pada elemen markup html.
<!-- --> <input type="button" value="CLICK" onclick="foo();"> // foo() function foo() { document.write("Calling foo"); }
Ketika Anda mengklik tombol pada halaman, "Memanggil foo" akan dicetak sebagai hasil dari memanggil fungsi. Sekarang tentang keanehan yang mungkin diperhatikan oleh pengembang Java. Mari kita kembali ke contoh di atas, di mana fungsi
foo () memanggil
bilah fungsi
() dengan sendirinya - yang hanya digunakan sebagai fungsi internal. Menurut ide itu, kami berharap itu dapat dibuat pribadi. Tetapi tidak ada pemilih akses di JS. Tidak ada cara untuk membuat bidang
pribadi penambahan sederhana dari kata ini sebelum deklarasi fungsi. Mari kita melangkah lebih jauh. Mari kita membuat objek - instance kelas dengan bidangnya dan satu metode.
function getLocation() { if (this.person === "Igor" && this.age > 25) { document.write("Your name " + this.person + ", location = Vishnevaia 1"); } else { document.write("Your name " + this.person + ", location = rp Sokoloviy"); } } function Person(person, age) { this.person = person; this.age = age; this.getLocation = getLocation; } var igor = new Person("Igor", 26); igor.getLocation(); document.write("<br />"); getLocation();
Jika Anda melihat kode ini melalui mata pengembang Java, Anda dapat melihat bahwa fungsi
Person adalah konstruktor objek dari kelas
Person dan definisi bidang dan metode yang membentuk kelas. Fungsi
getLocation () adalah fungsi dari kelas
Person . Di dalamnya, kami menggunakan akses ke bidang kelas instance
this.person dan
this.age . Adalah logis bahwa fungsi ini menggunakan instance saat ini dari kelas
Person harus berfungsi hanya dengan itu dan panggilan terakhir ke fungsi
getLocation () seharusnya tidak berfungsi. Tapi, di JS ini normal, karena konsep kelas, fungsi, metode kelas kabur. Lemah mengetik semuanya. Dengan menjalankan skrip ini, Anda akan menerima output berikut di jendela browser:
Your name Igor, location = Vishnevaia 1 Your name undefined, location = rp Sokoloviy
Namun, menulis ulang kode sebagai berikut, mendefinisikan fungsi di dalam kelas, panggilannya tidak tersedia untuk instance kelas:
function Person(person, age) { this.person = person; this.age = age; this.getLocation = function () { if (this.person === "Igor" && this.age > 25) { document.write("Your name " + this.person + ", location = Vishnevaia 1"); } else { document.write("Your name " + this.person + ", location = rp Sokoloviy"); } }; } var igor = new Person("Igor", 26); igor.getLocation(); document.write("<br />"); getLocation();
Panggilan terakhir akan menghasilkan kesalahan, karena fungsi
getLocation () tidak ditentukan. Ternyata bahkan di JS tidak ada pengubah akses, tetapi ada ruang lingkup fungsi dan variabel yang dikendalikan dengan kurung kurawal. JavaScript sangat bagus dengan sejumlah besar opsi untuk menembak diri sendiri.
Array
Ketika kami berbicara tentang array, kami mewakili struktur data yang menyimpan jenis elemen yang sama, yang diakses oleh indeks. Ini di Jawa. Ketika datang ke JS dan pengetikan yang lemah, maka anarki nyata ikut bermain. Dalam contoh berikut, kami membuat 4 array. Dalam yang pertama ada elemen dari tipe yang berbeda, di nomor hanya kedua, di
boolean ketiga, di
boolean keempat dan
nomor :
var mix = [3, "Igor Ivanovich", "Renat Raphaelevich", "Sergey Sergeevich", 1, 12.3, true]; var numbers = [1,2,3,4,5]; var booleans = [false, false, true]; var mix2 = [false, 1, 2]; document.write("Type elements in mix: "); for (element in mix) { document.write(typeof mix[element] + " "); } document.write("<br /> Type elements in numbers: "); for (element in numbers) { document.write(typeof numbers[element] + " "); } document.write("<br /> Type elements in booleans: "); for (element in booleans) { document.write(typeof booleans[element] + " "); } document.write("<br /> Type elements in mix2: "); for (element in mix2) { document.write(typeof mix2[element] + " "); } var sum = numbers[0] + numbers[1]; document.write("<br /> sum numbers = " + sum);
Setelah menjalankan skrip, kita akan melihat jenis setiap elemen dari setiap array dan jumlah dari dua digit pertama dari array angka.
Type elements in mix: number string string string number number boolean Type elements in numbers: number number number number number Type elements in booleans: boolean boolean boolean Type elements in mix2: boolean number number sum numbers = 12
Kesimpulan
Saat Anda pertama kali menyentuh bahasa JavaScript, pengembang Java mungkin mengalami semua komentar dan pertanyaan di atas. Ketika saya pertama kali bertemu JS, saya tidak mengalami emosi yang paling menyenangkan. Melainkan, seperti ini: "Apa ...?" Banyak perbedaan dan kesalahpahaman terletak pada perbedaan antara tipifikasi dua bahasa. Saya tidak tahu mengapa JS perlu mengetik dengan lemah.
Mungkin ada manfaatnya mengapa hal ini dilakukan. Jika Anda tahu jawabannya, tulis di komentar.
Ya, ada TypeScript, yang tampaknya diketik, tetapi pada akhirnya akan diterjemahkan ke dalam JS yang sama. Secara pribadi, saya bukan pendukung pengetikan yang lemah, tetapi kolega saya, yang baru-baru ini mencoba JavaScript, karena alasan tertentu senang dengannya. Mungkin ini masalah selera. Dan apa yang menurut Anda lebih baik daripada mengetik lemah atau kuat?