Apakah Anda benar-benar tahu apa itu array?

Di tempat saya bekerja, saya mengharapkan pengetahuan PHP dan JavaScript dari pengembang web. Selama wawancara, saya menemukan bahwa cukup mengajukan satu pertanyaan sederhana untuk mengetahui seberapa dalam pengembang memahami alat yang ia gunakan setiap hari. Pertanyaan ini adalah:

Apa persamaan dan perbedaan antara array dalam JavaScript dan PHP?

Kemampuan menulis kode adalah satu hal. Dan yang lain - pemahaman tentang mekanisme internal bahasa yang digunakan. Jawaban untuk pertanyaan tunggal ini memberi saya banyak informasi tentang orang yang diwawancarai. Memang, hampir setiap bahasa umum memiliki susunan. Sangat mudah untuk membuat asumsi yang menurut array dalam bahasa yang berbeda, kurang lebih, hal yang sama. Banyak programmer melakukan ini.





Ini adalah asumsi yang salah, menyebabkan banyak kesalahan kecil, untuk menulis kode yang disusun secara tidak rasional, ketidakmampuan untuk secara efektif menggunakan kekuatan bahasa.

Array dan bahasa ibu mereka - C


Bahasa C bukan bahasa pemrograman pertama dalam sejarah, tetapi bahasa yang lebih mempengaruhi industri TI daripada yang lain. Banyak pengembang mengajar di institut C sebagai bahasa pertama mereka. Baik PHP dan JavaScript mengambil sesuatu dari C. Sebagai hasilnya, kita dapat mengamati beberapa kesamaan antara bahasa-bahasa ini dan C, dan analisis array dalam C yang akan memungkinkan kita untuk menunjukkan sejauh mana struktur data ini telah maju sejak 1972.

Dalam C, array diketik dengan kuat dan memiliki panjang yang tetap.

int myArray[10];
int fibonacci[10] = {0, 1, 1, 2, 3, 5, 8, 13, 21, 34};

Di atas adalah beberapa deklarasi array. Mereka hanya dapat menyimpan bilangan bulat, yang jumlahnya tidak melebihi 10.

Saat bekerja dengan array seperti itu, sebuah loop digunakan for. Pola ini, tanpa kebutuhan nyata, disalin dalam banyak bahasa pemrograman lain:

int i, sum;
for (i = 0; i < 9; i++) {
  sum += fibonacci[i];
}

Desain seperti itu tidak terlihat liar di JavaScript atau PHP. Tapi di sinilah letak bahaya.

Array JavaScript


Anda dapat membayangkan bahwa array dalam JavaScript sangat mirip dengan array dalam C. Dan kebenarannya adalah bahwa konstruksi berikut terlihat sangat normal di JS:

let myArray = [];
let fibonacci = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34];

Namun, array dalam JavaScript dan C adalah dua hal yang berbeda. Misalnya, berikut ini, jelas, tidak mungkin di C:

myArray[0] = 5;
myArray[1] = 5.5;
myArray[2] = 'cat';
myArray[3] = [1,2,3];
myArray[4] = (a,b) => {a+b};
myArray[1000] = 'mind blown';
// myArray = [5, 5.5, 'cat', [1,2,3], (a,b) => {a+b}];

Dalam JavaScript, panjang array bervariasi. Jenis isinya tidak dikontrol - sama seperti jenis variabel biasa. Bahasa mengendalikan memori, sebagai akibatnya, panjang array dapat bertambah atau berkurang, dan pengembang tidak dapat memikirkannya. Sebenarnya, susunan JavaScript sangat mirip dengan daftar.

Penghitungan array dapat diatur menggunakan metode yang gagal dipinjam dari C:

let sum = 0;
for (i = 0; i < fibonacci.length; i++) {
  sum += fibonacci[i];
}

Namun, kita tidak perlu menggunakan pendekatan ini untuk menghitung array JS. Misalnya, ada variabel perantara yang tidak perlu. Dalam desain seperti itu, kesalahan mungkin timbul, penyebabnya adalah nilai yang tidak ditentukan atau salah. Apakah ada nilai dalam elemen array fibonacci[10]? Dan jika nilainya ada - apakah itu bilangan bulat?

Tetapi JavaScript memiliki mekanisme yang jauh lebih baik untuk bekerja dengan array. Array di JS bukan hanya beberapa struktur data sederhana. Mereka, seperti fungsi, adalah objek kelas satu. Mereka memiliki metode untuk menyelesaikan berbagai masalah secara memadai:

let sum = fibonacci
   .filter(Number.isInteger)
   .reduce(
      (x,y) => {return x+y}, 0
    );

Ini jauh lebih baik daripada perulangan melalui array for.


Beberapa metode array.

Selain itu, seperti yang telah disebutkan, panjang array di JS, tidak seperti panjang array C, tidak tetap. Ini memungkinkan Anda untuk memiliki efek yang cukup menarik pada array yang memengaruhi panjangnya. Jadi, menggunakan metode ini, Anda dapatpopmengekstrak elemen terakhir dari array. Dan metode inipushmemungkinkan Anda untuk menambahkan elemen baru ke akhir array. Metode iniunshiftmemungkinkan Anda untuk menambahkan elemen ke awal array. Dan metodenyashiftadalah mengekstraksi elemen pertama dari array. Menggunakan berbagai kombinasi metode ini, Anda dapat bekerja dengan array seperti halnya tumpukan atau antrian. Itu semua tergantung pada kebutuhan programmer.

Array dalam PHP


Array dalam PHP hampir seperti array JavaScript.

Mereka, seperti array JS, memiliki panjang variabel dan pengetikan lemah. Oleh karena itu, mungkin tergoda untuk memutuskan bahwa array dalam PHP dan JS adalah hal yang sama.

$myArray = [];
$fibonacci = [0, 1, 1, 2, 3, 5, 8, 13, 21, 34];
$myArray[0] = 5;
$myArray[1] = 5.5;
$myArray[2] = 'cat';
$myArray[3] = [1,2,3];
$myArray[4] = function($a, $b) { return $a + $b; };

Fungsi Lambda dalam PHP tidak seindah fungsi serupa di JS (dalam ES6), tetapi contoh ini ditulis dalam PHP secara fungsional setara dengan contoh JS yang sebelumnya dianggap.

Ada dapat digunakan, dan analog dijelaskan di atas fungsi untuk menambahkan elemen ke array dan mengambil mereka dari itu ( array_push, array_pop, array_shift, array_unshift).

Tetapi dalam JavaScript (juga dalam C) Anda tidak dapat menulis sesuatu yang mirip dengan yang berikut ini (tentu saja, Anda dapat menulis kode yang serupa dalam JavaScript, tetapi tidak akan berfungsi seperti di PHP):

$myArray['banana'] = 'yellow fruit';
$myArray[5] = 'is alive';
$myArray[0.02] = 'the 2%';

Dalam PHP, dari sudut pandang teknis, array adalah tabel hash atau kamus. Mereka menggunakan pasangan kunci / nilai. Kunci dapat berupa nilai primitif apa pun: bilangan bulat, angka titik mengambang, string. Karena array php didasarkan pada kamus, menemukan nilai-nilai kunci dalam array ini sangat efisien. Yaitu, kompleksitas waktu pencarian O(1).

Ini berarti bahwa array PHP dapat berhasil berfungsi sebagai tabel pencarian sederhana:

$colours = [
  'red' => '#FF0000',
  'green' => '#00FF00',
  'blue' => '#0000FF',
  'orange' => '#FF6600',
];

Array PHP memberi pengembang banyak fleksibilitas. Array ini dapat diurutkan berdasarkan kunci dan nilai. Anda dapat, misalnya, "membalikkan" sebuah array dengan array_flip, menukar kunci dan nilai, yang memungkinkan untuk mengatur pencarian dalam array data yang diperlukan dengan sangat efisien.

Menemukan nilai tertentu dalam array reguler memakan waktu O(n), karena selama pencarian Anda perlu memeriksa setiap nilai yang disimpan dalam array. Dan dalam PHP, mudah untuk membuat kompleksitas waktu dari jumlah operasi yang sama menjadi O(1):

$users = [
  1 => 'Andi',
  2 => 'Benny',
  3 => 'Cara',
  4 => 'Danny',
  5 => 'Emily',
];
$lookupTable = array_flip($users);
return $lookupTable['Benny'];

Tentu saja, sesuatu yang serupa juga tersedia dalam JavaScript, meskipun di sini sudah diperlukan untuk menggunakan kemampuan objek. Tetapi karena ini, Anda harus berkompromi. Yaitu, ketika bekerja dengan objek, pengembang tidak akan memiliki metode array seperti yang kita bicarakan di atas.

Jika kita melanjutkan diskusi tentang array PHP, kita dapat mengatakan bahwa enumerasi mereka diatur dengan sederhana dan aman. Di sini dimungkinkan untuk menerapkan siklus yang formenyerupai siklus yang sama dari C, tetapi sebelum Anda melakukan ini, Anda harus hati-hati memikirkan mengapa melakukan hal itu. PHP, terima kasih untuk loop foreach, memungkinkan Anda untuk memecahkan masalah yang spesifik untuk array panjang variabel yang dapat berisi nilai dari berbagai jenis:

$sum = 0;
foreach ($myArray as $key => $value) {
  $sum += is_numeric($value) ? $value : 0;
}

Loop memberi akses ke kedua kunci dan nilai, yang memungkinkan programmer untuk bekerja dengan keduanya.

Perlu dicatat bahwa array PHP berbeda dari array JS dalam array dalam PHP Anda harus menggunakan fungsi eksternal untuk menjalankan beberapa operasi dengan array:

$sum = 
  array_reduce(
    array_filter($fibonacci, 'is_numeric'),
    function ($x, $y) { return $x + $y; },
    0
  };

Ini fungsional, tetapi tidak seindah dalam JavaScript. Jika Anda ingin menulis kode untuk bekerja dengan array PHP yang menyerupai kode yang digunakan dalam JavaScript (ada argumen kuat yang mendukung pendekatan ini), maka Anda mungkin perlu melihat solusi khusus. Katakan - ke kelas Collectiondari framework Laravel. Namun, PHP memungkinkan Anda untuk membuat objek yang kemampuannya mirip dengan array (misalnya, mereka dapat diproses dalam loop foreach).

Jika PHP adalah bahasa pemrograman utama Anda, Anda dapat terbiasa dengannya dan Anda dapat sepenuhnya melupakan kekuatan yang mengintai mekanisme dasarnya.

Singkatnya, array PHP, fitur bahasa yang paling diremehkan dan paling tidak mencolok, yang, jika digunakan dengan benar, bisa sangat bermanfaat.

Ringkasan: Pertanyaan dan Jawaban


Pertanyaan : Apa persamaan dan perbedaan antara array dalam JavaScript dan PHP?

Jawaban : dalam PHP dan JavaScript, array pada dasarnya adalah daftar panjang variabel yang diketik dengan lemah. Dalam JavaScript, kunci untuk elemen array adalah bilangan bulat yang dipesan. Dalam PHP, array dapat dibandingkan dengan daftar yang mendukung pengurutan, dan dengan kamus yang nyaman untuk mencari item dengan kunci. Kunci array PHP dapat berupa nilai tipe primitif apa pun, dan Anda bisa mengurutkan array tersebut dengan kunci atau nilai.

Pembaca yang budiman! Fitur standar apa yang menurut Anda paling tidak dimiliki oleh array JavaScript?


All Articles