Analog dengan Python dan JavaScript. Bagian tiga

Kami terus menerjemahkan serangkaian artikel tentang analog dengan Python dan JavaScript


Dalam rilis sebelumnya, kami mengandalkan sintaksis versi klasik Python (2.7) dan JS berdasarkan ECMAScript 5. Kali ini kami akan menggunakan fungsi-fungsi baru yang muncul dalam Python 3.6 dan JS dari standar ECMAScript 6.


ECMAScript 6 adalah standar yang relatif baru yang didukung oleh sebagian besar browser modern . Untuk menggunakan standar 6 di browser lama, Anda perlu Babel untuk menerjemahkan desain JS6 modern ke dukungan lintas-browser.


Dalam artikel hari ini: variabel dalam string, daftar membongkar, fungsi lambda, iterasi tanpa indeks, generator dan set.


Isi dari masalah lain:


  1. Konversi tipe bagian pertama , operator ternary, akses ke properti dengan nama properti, kamus, daftar, string, rangkaian string
  2. Bagian kedua adalah serialisasi kamus, JSON, pelanggan tetap, kesalahan dan pengecualian.
  3. Artikel ini
  4. Bagian keempat adalah argumen fungsi, membuat dan bekerja dengan kelas, pewarisan, pengambil setter, dan properti kelas.

Variabel dalam Baris


Cara tradisional membangun string dengan variabel menggunakan gabungan string dan variabel:


name = 'World' value = 'Hello, ' + name + '!\nWelcome!' 

Catatan seperti itu mungkin tampak tersebar dan kurang dibaca, dan Anda sering dapat membuat kesalahan di ruang di sekitar kata-kata di baris.


Dimulai dengan versi 3.6 dalam Python dan JS ECMAScrip6, Anda dapat menggunakan interpolasi string, atau, dalam istilah Python, f-string. Ini adalah pola string di mana nilai-nilai dari variabel diganti.


Dengan Python, f-lines ditandai dengan f sebelum tanda kutip:


 name = 'World' value = f"""Hello, {name}! Welcome!""" price = 14.9 value = f'Price: {price:.2f} €' # 'Price: 14.90 €' 

Di JS, pola string dimulai dan diakhiri dengan backtrick `


 name = 'World'; value = `Hello, ${name}! Welcome!`; price = 14.9; value = `Price ${price.toFixed(2)} €`; // 'Price: 14.90 €' 

Perhatikan bahwa pola dapat berupa garis tunggal dan garis ganda.
Dengan Python, Anda bisa mengatur pemformatan variabel.


Membongkar Daftar


Dalam Python, dan sekarang di JS, ada peluang menarik untuk menetapkan elemen urutan ke berbagai variabel. Misalnya, kita dapat menetapkan tiga nilai dari daftar ke tiga variabel:


 [a, b, c] = [1, 2, 3] 

Untuk tupel, tanda kurung dapat dihilangkan.
Contoh berikut ini sangat populer di Python sebagai cara untuk menukar nilai dua variabel:


 a = 1 b = 2 a, b = b, a #   

Di JS6 +, dimungkinkan juga:


 a = 1; b = 2; [a, b] = [b, a]; //   

Dalam Python, jika kita memiliki jumlah elemen yang tidak terbatas dalam daftar atau tupel, kita dapat menetapkan elemen-elemen ini ke tupel variabel di mana beberapa nilai terakhir kembali sebagai daftar:


 first, second, *the_rest = [1, 2, 3, 4] # first == 1 # second == 2 # the_rest == [3, 4] 

Hal yang sama dapat dilakukan dalam JS (ECMAScrip6):


 [first, second, ...the_rest] = [1, 2, 3, 4]; // first === 1 // last === 2 // the_rest === [3, 4] 

Fungsi Lambda


Baik Python dan JS memiliki fungsi yang cukup jelas untuk membuat fungsi single-line. Fungsi semacam itu disebut fungsi lambda. Lambdas adalah fungsi yang mengambil satu atau lebih argumen dan mengembalikan nilai yang dihitung. Biasanya, fungsi lambda digunakan ketika Anda perlu mentransfer satu fungsi ke fungsi lain sebagai panggilan balik, atau ketika perlu untuk memproses setiap elemen dari urutan.


Dengan Python, Anda bisa mendefinisikan fungsi lambda menggunakan kata kunci lambda :


 sum = lambda x, y: x + y square = lambda x: x ** 2 

JS menggunakan notasi => . Jika ada lebih dari satu argumen, mereka ditempatkan dalam tanda kurung:


 sum = (x, y) => x + y; square = x => Math.pow(x, 2); 

Iterasi tanpa indeks


Banyak PL memungkinkan Anda untuk mem-bypass array hanya menggunakan akses ke elemen tertentu dengan nomor indeks dan siklus dengan kenaikan indeks ini.


 for (i=0; i<items.length; i++) { console.log(items[i]); } 

Ini bukan rekor yang sangat indah, dan sedikit rumit untuk pemula - catatan seperti itu tidak terlihat alami. Python memiliki cara yang ringkas dan indah untuk berkeliling daftar:


 for item in ['A', 'B', 'C']: print(item) 

Dalam JS modern, ini diterapkan menggunakan for..of operator:


 for (let item of ['A', 'B', 'C']) { console.log(item); } 

Anda juga dapat memotong karakter garis demi karakter dengan Python:


 for character in 'ABC': print(character) 

Dan dalam JavaScript modern:


 for (let character of 'ABC') { console.log(character); } 

Generator


Baik Python dan JS modern memungkinkan Anda untuk mendefinisikan fungsi-fungsi khusus yang akan terlihat seperti iterator. Dengan setiap panggilan (iterasi), mereka akan mengembalikan nilai yang dihasilkan selanjutnya dari urutan. Fungsi semacam itu disebut generator.


Generator biasanya digunakan untuk mendapatkan: angka dari rentang, baris dari file, data halaman demi halaman dari API eksternal, angka fibonacci dan urutan lain yang dihasilkan secara dinamis.


Secara teknis, generator terlihat seperti fungsi biasa, tetapi alih-alih mengembalikan nilai tunggal (dan menghentikan pekerjaan), generator mengembalikan nilai tunggal dan menghentikan operasi hingga panggilan berikutnya. Mereka akan menghasilkan nilai berikut dari daftar dengan setiap panggilan sampai akhir daftar tercapai.


Pertimbangkan contoh dalam Python di mana generator hitung mundur () dibuat, yang mengembalikan angka dari angka yang diberikan ke 1 dalam urutan terbalik (10,9,8, ..., 1):


 def countdown(counter): while counter > 0: yield counter counter -= 1 for counter in countdown(10): print(counter) 

Hal yang sama dapat diperoleh di JS modern, tetapi perhatikan * dalam deskripsi fungsi. Ini mendefinisikannya sebagai generator:


 function* countdown(counter) { while (counter > 0) { yield counter; counter--; } } for (let counter of countdown(10)) { console.log(counter); } 

Set


Kami sudah berkenalan dengan daftar (daftar), tupel (tupel), array (array). Tetapi ada tipe lain dari set data. Set adalah array data di mana setiap elemen unik hanya ada dalam satu salinan. Teori himpunan mendefinisikan operasi dengan himpunan sebagai persatuan, persimpangan, dan perbedaan, tetapi kami tidak akan mempertimbangkannya sekarang.


Kami membuat set, menambahkan elemen ke dalamnya, memeriksa keberadaan elemen, mendapatkan jumlah total elemen, berkeliling di set dengan elemen dan menghapus satu elemen menggunakan Python:


 s = set(['A']) s.add('B'); s.add('C') 'A' in s len(s) == 3 for elem in s: print(elem) s.remove('C') 

Hal yang sama di JS:


 s = new Set(['A']); s.add('B').add('C'); s.has('A') === true; s.size === 3; for (let elem of s.values()) { console.log(elem); } s.delete('C') 

Untuk meringkas


  • Pola string (f-line) dapat meningkatkan keterbacaan dan menyederhanakan kode, bahkan dalam kasus objek multi-baris.
  • Anda dapat mem-bypass array, grup, atau string tanpa menggunakan indeks.
  • Menggunakan generator, Anda bisa mendapatkan urutan dengan jumlah elemen yang hampir tak terbatas.
  • Menggunakan set memudahkan untuk memverifikasi keunikan elemen dalam array.
  • Gunakan lambdas saat Anda membutuhkan fungsi satu baris kecil.

Pada bagian selanjutnya, kita akan berbicara tentang argumen fungsi, kelas, pewarisan, dan properti.

Source: https://habr.com/ru/post/id418191/


All Articles