Halo semuanya! Hari ini kami membagikan bagian terakhir dari terjemahan artikel “Apa yang ada dan apa yang tidak ada di dalam Go”. Kami mengingatkan Anda bahwa pada bagian
pertama kami berbicara tentang elemen-elemen yang ada di Go, hari ini kami akan berbicara tentang apa yang tidak ada di Go.
Terjemahan dari materi ini disiapkan sebagai antisipasi dimulainya aliran baru di kursus Pengembang Golang .
Go dibuat dengan melihat ke belakang, dan paket dasarnya benar-benar tersusun dengan baik: ia memiliki pengumpulan sampah, paket, fungsi kelas satu, ruang lingkup leksikal, antarmuka panggilan sistem dan garis yang tidak dapat diubah, teks yang biasanya dikodekan dalam UTF-8. Tetapi memiliki fitur yang relatif sedikit dan tidak mungkin menambah jumlahnya. Misalnya, ia tidak memiliki konversi numerik implisit, tidak ada konstruktor atau destruktor, tidak ada kelebihan operator, tidak ada nilai parameter default, tidak ada pewarisan, tidak ada generik, tidak ada pengecualian, tidak ada makro, tidak ada penjelasan fungsi, dan tidak ada penyimpanan aliran lokal.
Item tidak ditemukan di Go
Konversi jumlah implisit
Dalam pemrograman, konversi tipe melibatkan pengubahan tipe data suatu objek ke objek lainnya. Konversi tersirat berarti bahwa perubahan ini dilakukan secara otomatis oleh penerjemah atau kompiler. Misalnya, menetapkan nilai int ke variabel yang sebelumnya diberi nilai floating point. Konversi ini tidak tersedia di Go. Ketika suatu tipe tidak disebutkan ketika mendeklarasikan variabel, itu diberikan tipe yang cocok, misalnya, int, float, string, dll., Berdasarkan sintaks literal. Pada contoh di bawah, Go akan melempar kesalahan karena akan menemukan dua tipe data yang berbeda dan tidak akan dapat bekerja dengannya. Ini terjadi karena kompiler Go secara implisit mengkonversi
int
ke
float64
.
a := 1.0
Konstruktor dan destruktor
Tugas para desainer adalah pemrosesan utama dan inisialisasi objek, dan destruktor adalah untuk menghancurkan objek setelah umur layanan dan memori bebas. Tidak seperti paradigma berorientasi objek lainnya, tidak ada kelas di Go. Oleh karena itu, konsep konstruktor dan destruktor juga tidak ada.
Operator Kelebihan
Overloading operator adalah cara di mana operator dapat melakukan operasi yang ditentukan pengguna. Operator berperilaku sesuai dengan argumen yang diberikan. Misalnya, dalam C ++
+
operator dapat digunakan untuk menggabungkan string, serta menambahkan dua bilangan bulat. Nilai "+" juga dapat ditentukan oleh pengguna dan diubah sesuai dengan kebutuhan program. Dalam JavaScript, operasi tipe
'1' + 1
akan menghasilkan output dari string
"11"
karena prioritas yang lebih tinggi dari string. Definisi semacam itu tidak diperbolehkan dalam Go, operator bekerja secara ketat dan hanya melakukan operasi dengan tipe data argumen tertentu.
Nilai default
Go tidak mengizinkan default dalam prototipe fungsi atau ketika fungsi kelebihan beban. Spesifikasi bahasa Go sangat kecil dan khusus didukung untuk menyederhanakan parsing. Tidak seperti bahasa lain, di mana Anda dapat memberikan nilai default / parameter opsional ke suatu fungsi, di Go Anda hanya dapat memeriksa apakah suatu nilai telah diteruskan. Pendekatan yang berbeda dengan nilai default di Go akan menjadi sesuatu seperti ini.
func Concat1(a string, b int) string { if a == "" { a = "default-a" } if b == 0 { b = 5 } return fmt.Sprintf("%s%d", a, b) }
Warisan
Karena Go tidak mengikuti hierarki kelas yang dikenal dari pemrograman berorientasi objek, struktur dalam Go tidak diwarisi satu sama lain. Secara umum, pewarisan adalah prosedur dalam bahasa OOP di mana satu kelas mewarisi properti dan metode kelas orang tuanya. Warisan dapat masuk jauh ke dalam beberapa tingkatan. Namun, dalam Go, struktur dapat dikompilasi hanya dengan memberikan pointer atau menanamkan dalam struktur kolaboratif. Contoh komposisi on Go diberikan di bawah ini. Mengganti kelas bisa menjadi antarmuka di Go. Antarmuka ada dalam bahasa lain, tetapi antarmuka Go secara implisit puas.
type TokenType uint16 type Token struct { Type TokenType Data string } type IntegerConstant struct { Token *Token Value uint64 }
Pemrograman umum
Pemrograman generik adalah bentuk di mana kita memasukkan pola yang dikenal sebagai generik, yang sebenarnya bukan kode sumber yang sebenarnya, tetapi dikompilasi oleh kompiler untuk mengubahnya menjadi kode sumber. Mari kita coba memahami polanya dengan cara yang sederhana. Pikirkan pola dalam pemrograman sebagai formulir. Kami membuat formulir di mana detail penting dari template dibiarkan kosong dan perlu diisi nanti saat kompilasi. Kemudian, ketika kita perlu membuat sesuatu dari template ini, kita cukup menentukan detailnya, misalnya, ketik.
template<typename T> class MyContainer {
Cuplikan di atas ditulis dalam C ++. Template tidak disediakan dengan tipe, tetapi disediakan ketika MyContainer diinisialisasi. Kami juga dapat menentukan jenis lain, seperti
float
,
double
, dll., Sesuai dengan kebutuhan kami. Templat yang digeneralisasi berguna saat menjalankan algoritme pada sekumpulan data dari beberapa jenis.
Pengecualian
Pengecualian menunjukkan kondisi yang wajar bahwa aplikasi mungkin ingin mencegat. Melalui pengecualian, kita dapat menyelesaikan situasi di mana program mungkin tidak berfungsi. Pengecualian yang dicentang tidak mengarah pada penghentian total eksekusi, melainkan dapat dicegat dan diproses. Go tidak memiliki pengecualian, ia hanya memiliki kesalahan seperti antarmuka dan kesalahan bawaan. Perbedaan utama antara kesalahan dan pengecualian adalah bahwa mereka menunjukkan masalah serius dan harus segera diselesaikan, sehingga pemrograman Go menjadi lebih ketat. Kesalahan dalam Go perlu diperiksa secara eksplisit saat terjadi.
Makro
Macro adalah perintah makro. Ini adalah cara untuk meminimalkan tugas pemrograman berulang dengan mendefinisikan output yang telah ditentukan untuk serangkaian input yang diberikan. Sebagai contoh, jika kita ingin mendapatkan kuadrat angka dalam C, kita cukup menulis
x * x
, di mana
x
adalah variabel, tetapi kita juga bisa mendefinisikan makro yang mengembalikan kuadrat angka setiap kali kita membutuhkannya. Macro bukan fungsi. Macro tidak tersedia di Go.
#define square(x) ((x) * (x)) int main() { int four = square(2);
Penjelasan Fitur
Anotasi adalah cara untuk mengaitkan metadata dengan parameter fungsi. Dalam Python, anotasi didukung secara sintaksis dan sepenuhnya opsional. Mari kita lihat contoh kecil untuk menjelaskan anotasi dengan Python.
def foo(a: int, b: 'description', c: float) -> float: print(a+b+c) foo(1, 3, 2)
Dalam kode di atas, parameter
a
,
b
dan
c
dijelaskan dengan beberapa metadata.
a
dan
c
penjelasan
c
tipe
int
dan
float
, sementara
b
disediakan dengan deskripsi string.
foo
mencetak output spesifik, meskipun jenis argumen yang disebutkan dalam penjelasan.
Penyimpanan aliran lokal
Penyimpanan aliran lokal adalah metode pemrograman komputer yang menggunakan memori statis atau global yang dilokalisasi ke aliran. Ini adalah area statis tempat data disalin untuk setiap aliran dalam program. Ketika beberapa aliran menggunakan data statis yang sama untuk tugas yang sama, mereka dapat menyalinnya dari penyimpanan aliran lokal daripada menyimpannya sendiri.
Kesimpulan
Go berfokus pada kesederhanaan dan keanggunan. Ini memiliki sintaks yang cepat, kecil, dan sederhana. Tidak seperti bahasa OOP lainnya, ia memiliki lebih sedikit konsep yang harus disimpan di kepala. Pencipta Go memilih kesederhanaan bahasa tanpa menambahkan kompleksitas multiplikatif ke bagian bahasa yang berdekatan. Oleh karena itu, Go tidak memiliki fitur yang membuat parser lebih lambat dan lebih besar. Kesederhanaan adalah kunci untuk perangkat lunak yang baik.
CATATAN Cuplikan kode dalam artikel ini disalin dari berbagai artikel di Internet.
Itu saja.
Baca bagian pertama