Ada sekelompok Perl-benci di Stack Overflow belakangan ini, jadi saya pikir saya akan membawa pertanyaan " Lima hal yang Anda benci tentang bahasa favorit Anda " ke Stack Overflow. Ambil bahasa favorit Anda dan ceritakan lima hal yang Anda benci tentang itu. Itu mungkin hal-hal yang hanya mengganggu Anda, kelemahan desain yang diakui, masalah kinerja yang diakui, atau kategori lainnya. Anda hanya harus membencinya, dan itu harus menjadi bahasa favorit Anda.
Jangan membandingkannya dengan bahasa lain, dan jangan berbicara tentang bahasa yang sudah Anda benci. Jangan membicarakan hal-hal yang Anda sukai dalam bahasa favorit Anda. Saya hanya ingin mendengar hal-hal yang Anda benci tetapi menoleransi sehingga Anda dapat menggunakan semua hal lain, dan saya ingin mendengarnya tentang bahasa yang Anda harapkan akan digunakan orang lain.
Saya menanyakan hal ini setiap kali seseorang mencoba mendorong bahasa favorit mereka pada saya, dan kadang-kadang sebagai pertanyaan wawancara. Jika seseorang tidak dapat menemukan lima hal untuk dibenci tentang alat favoritnya, dia tidak tahu cukup baik untuk mengadvokasi atau menarik dolar besar menggunakannya. Dia belum menggunakannya dalam situasi yang cukup berbeda untuk sepenuhnya mengeksplorasi. Dia menganjurkannya sebagai budaya atau agama, yang berarti bahwa jika saya tidak memilih teknologi favoritnya, saya salah.
Saya tidak terlalu peduli bahasa mana yang Anda gunakan. Tidak ingin menggunakan bahasa tertentu? Kalau begitu jangan. Anda menjalani due diligence untuk membuat pilihan berdasarkan informasi dan masih tidak menggunakannya? Baik. Terkadang jawaban yang tepat adalah "Anda memiliki tim pemrograman yang kuat dengan praktik yang baik dan banyak pengalaman di Bar. Mengubah ke Foo akan menjadi bodoh."
Ini juga pertanyaan yang bagus untuk ulasan kode. Orang yang benar-benar tahu basis kode akan memiliki segala macam saran untuknya, dan mereka yang tidak mengetahuinya dengan baik akan memiliki keluhan yang tidak spesifik. Saya bertanya hal-hal seperti "Jika Anda dapat memulai kembali dari proyek ini, apa yang akan Anda lakukan secara berbeda?" Di negeri fantasi ini, pengguna dan programmer bisa mengeluh tentang apa saja dan semua yang mereka tidak suka. "Saya ingin antarmuka yang lebih baik", "Saya ingin memisahkan model dari tampilan", "Saya akan menggunakan modul ini daripada yang lain ini", "Saya akan mengganti nama rangkaian metode ini", atau apa pun yang benar-benar mereka don Saya suka tentang situasi saat ini. Begitulah cara saya memahami seberapa banyak pengembang tertentu tahu tentang basis kode. Ini juga petunjuk tentang seberapa banyak programmer
Benci bukan satu-satunya dimensi mencari tahu seberapa banyak orang tahu, tetapi saya telah menemukan itu menjadi yang cukup bagus. Hal-hal yang mereka benci juga memberi saya petunjuk seberapa baik mereka berpikir tentang subjek tersebut.
sumber
Jawaban:
Lima hal yang saya benci tentang Jawa:
Saya tahu, saya harus memeriksa Scala.
sumber
Wow, saya terkejut bahwa SQL belum membuatnya di sini. Tebak itu berarti tidak ada yang menyukainya :)
... Dan beberapa alasan bonus untuk membencinya, tanpa biaya tambahan
sumber
JavaScript :
Semua hal yang paling keren benar-benar rumit, tetapi kemudian, semua kesejukan ini juga terbungkus dalam sejumlah kecil kode sehingga Anda merasa bodoh karena berjuang untuk mengikutinya
'+' adalah pilihan operator yang absurd untuk penggabungan dalam bahasa yang diketik dengan lemah. Apakah mereka mencoba menakuti para noobs?
Ini adalah ladang ranjau kompatibilitas lintas-peramban (tidak peduli apakah itu dihidupkan atau tidak)
Ini umumnya tidak dipercaya - terkait dengan scummery seperti memblokir tombol kembali, pop-up yang tidak pernah mati, dll.
Hampir tidak mungkin untuk debug karena hanya ada beberapa pesan kesalahan yang berbeda dan beberapa jenis yang berbeda (Nomor, String, Objek, dll.)
Jika bukan karena jQuery, saya mungkin masih akan membencinya seperti dulu :)
sumber
char
s, melemparkan apa pun ke apa pun melalui void * pointer, dll.) Ini diketik secara statis alih-alih diketik secara dinamis , dan juga membutuhkan pengetikan eksplisit alih-alih ketik inferensi, tetapi itu tidak ada hubungannya dengan kuat / lemah mengetik. [Contoh acak: Python memiliki pengetikan kuat dinamis yang implisit, Haskell memiliki (opsional eksplisit) pengetikan kuat statis, Java memiliki pengetikan kuat eksplisit (kebanyakan statis), C memiliki pengetikan statis statis (relatif lemah).] "Sangat diketik" dan "diketik dengan lemah" "Sebenarnya tidak didefinisikan dengan baik.'3'+'2'='32'
,'3'-'2'=1
.PHP:
1) Memaksa saya untuk membuat variabel yang tidak perlu:
2) Implementasi lambdas jadi lumpuh itu kira-kira setara dengan menggunakan
eval()
dan sangat salah saya tidak pernah menggunakannya (lihat http://www.php.net/create_function ).3) Sistem coba / tangkap yang hanya dapat menangkap sekitar 80% kesalahan yang mungkin terjadi.
4) Dukungan Regex sama lemahnya dengan dukungan lambda karena harus ditulis dalam string biasa, membuat salah satu alat pemrograman yang paling sulit dipelajari sekitar tiga kali lebih sulit. Dan PHP seharusnya menjadi bahasa "mudah"?!?!?
5) Tidak ada cara untuk menarik barang dengan aman dari $ _POST tanpa menulisnya dua kali atau membangun fungsi Anda sendiri, atau menggunakan operator '@':
6) Jawaban bonus: '@'. Jika Anda tidak dapat repot menulis kode dengan benar, cukup tambahkan '@', dan sangat buruk bagi siapa pun yang harus men-debug kode Anda nanti.
sumber
C ++
sumber
C # / .NET:
lock
pernyataan - sebagai gantinya, Anda harus memiliki objek penguncian tertentu, dan harus ada metode sepertiAcquire
yang mengembalikan token kunci sekali pakai. Konsekuensi: seharusnya tidak ada monitor untuk setiap objek.GetHashCode()
danEquals()
tidak boleh diSystem.Object
- tidak semuanya cocok untuk hashing. Sebaliknya, memilikiIdentityComparer
yang melakukan hal yang sama, dan menjagaIComparer<T>
,IComparable<T>
,IEqualityComparer<T>
danIEquatable<T>
antarmuka untuk perbandingan kustom.Itu dari atas kepala saya - tanyakan saya besok dan saya akan datang dengan 5 yang berbeda :)
sumber
C
Harus berurusan secara manual dengan buffer string adalah rasa sakit yang rawan kesalahan. Karena begitu banyak komputasi yang benar-benar bergerak dan memodifikasi string (komputer tidak cukup banyak digunakan untuk hal-hal yang berderak angka besar seperti yang orang pikir mereka akan kembali ketika), sangat bagus untuk dapat menggunakan bahasa yang dikelola atau string C ++. objek untuk berurusan dengan ini. Ketika saya harus melakukannya dalam C lurus, rasanya seperti berenang di pasir apung.
sumber
Bagaimana dengan lima hal yang saya benci dari daftar "Hal yang saya benci tentang beberapa bahasa"? : D
5- Melukis merah oranye tidak membuatnya menjadi apel.
Ketika suatu bahasa dirancang, para desainer biasanya memikirkan apa manfaatnya. Menggunakannya untuk sesuatu yang sama sekali berbeda bisa berhasil, tetapi mengeluh ketika itu tidak bodoh. Ambil Python. Saya yakin seseorang memiliki atau seseorang suatu hari nanti akan membuat utilitas untuk membuat exe dari kode Python. Mengapa di bumi Tuhan Anda inginkan melakukan itu? Itu akan rapi — jangan salah paham — tetapi tidak ada gunanya. Jadi berhentilah mengeluh tentang hal itu!
Proyek yang dirancang dengan baik kemungkinan akan berisi kode dari berbagai bahasa. Itu tidak berarti Anda tidak dapat menyelesaikan proyek dengan hanya satu bahasa. Beberapa proyek mungkin baik dalam kemampuan bahasa apa pun yang Anda gunakan.
4 - Apakah Anda berdiri di atas kaki kayu?
Platform bisa menjadi pengaruh besar dari apa yang bisa dilakukan oleh bahasa. Dengan pengumpul sampah saat ini, atau bahkan pascals upaya awal pada "pengumpulan sampah", dapat membantu dalam memori memudar (mungkin malloc lebih banyak ram ??). Komputer lebih cepat dan tentu saja, kami berharap lebih banyak dari bahasa kami. Dan sejujurnya, kita mungkin harus. Namun, ada harga yang sangat besar untuk membayar kenyamanan kompiler untuk membuat tabel hash atau string atau berbagai konsep lainnya. Hal-hal ini mungkin tidak diwariskan ke platform tempat mereka digunakan. Untuk mengatakan mereka mudah dimasukkan ke bahasa hanya memberitahu saya Anda mungkin tidak memiliki kaki untuk berdiri.
3- Kesalahan siapa ini?
Bug. Kamu tahu. Saya suka serangga. Mengapa saya suka bug. Karena itu berarti saya dapat mempertahankan pekerjaan saya. Tanpa bug, akan ada banyak toko pizza tertutup. Namun, pengguna membenci bug. Tapi di sini ada sedikit air dingin. Setiap bug adalah kesalahan pemrogram. Bukan bahasa. Bahasa dengan sintaks yang ketat yang secara signifikan akan mengurangi berapa banyak bug yang mungkin dihasilkan akan menjadi bahasa yang sama sekali tidak berguna. Kemampuannya mungkin bisa dihitung dengan satu tangan. Anda ingin fleksibilitas atau kekuatan? Anda punya bug. Mengapa? Karena Anda tidak sempurna, dan Anda membuat kesalahan. Ambil contoh yang benar-benar dapat diidentifikasi di C:
Kita semua tahu apa yang akan dilakukan. Namun, apa yang mungkin sebagian dari kita tidak sadari adalah .. bahwa fungsionalitas dapat sangat bermanfaat. Tergantung apa yang kamu lakukan. Buffer overruns adalah biaya fungsionalitas itu. Kode itu di atas. Jika saya benar-benar merilisnya ke publik. Itu lagi .. katakan dengan saya .. "Salahku". Bukan C karena mengizinkan saya melakukannya.
2 - Bukankah seharusnya kita meletakkan itu di tempat sampah?
Sangat mudah untuk menunjuk fitur dalam bahasa yang tidak kita mengerti karena kita tidak sering menggunakannya dan menyebutnya bodoh. Mengeluh bahwa itu ada di sana, dll. Goto selalu menghibur saya. Orang-orang selalu mengeluh tentang keberadaan goto dalam bahasa. Namun saya yakin program terakhir Anda termasuk jenis goto. Jika Anda pernah menggunakan istirahat atau melanjutkan, Anda telah menggunakan goto. Itu apa adanya. Memang, itu adalah goto "aman", tetapi memang demikianlah adanya. Goto memiliki kegunaannya. Apakah goto "implisit" seperti melanjutkan atau menghancurkan digunakan atau gotos eksplisit (menggunakan kata kunci "goto" yang sebenarnya untuk bahasa apa pun). Bukan berarti pengembang bahasa sempurna, tetapi biasanya ... jika fungsionalitas telah ada sejak awal waktu (untuk bahasa itu). Kemungkinan aspek itu adalah kualitas yang menentukan bahasa itu. Berarti .. itu Sedang digunakan dan kemungkinan tidak berkeliaran karena kompatibilitas ke belakang. Ini digunakan hari ini. Seperti 5 menit yang lalu. Dan digunakan dengan benar. Yah .. bisa dibilang seseorang menggunakannya dengan tidak benar, tetapi itu berhubungan dengan # 3 dalam daftar saya.
1. - Semuanya adalah objek.
Oke .. ini benar-benar bagian dari # 2. Namun sejauh ini ini adalah keluhan paling menyebalkan yang saya lihat dalam daftar kebencian. Tidak semuanya adalah objek. Ada banyak sekali konsep yang tidak termasuk atau perlu menjadi objek. Menempatkan barang-barang di tempat yang bukan milik mereka hanya jelek dan dapat mengurangi efisiensi suatu program. Tentu. Mungkin tidak banyak tergantung pada bahasanya. Ini juga berhubungan dengan # 5. Ini berarti ... ya. Global tidak masalah. Fungsi seperti metode statis seharusnya ok. Menggabungkan pemrograman OO dengan fungsi global tidak masalah. Sekarang .. itu tidak berarti kita semua harus keluar dan "membebaskan" kode kita dari model objek itu juga. Saat mendesain bagian kode atau keseluruhan proyek, apa yang terjadi di balik layar harusdipertimbangkan saat menyusunnya. Bukan hanya di mana konsep itu hidup dan banyak faktor lainnya. Mengapa membungkus fungsi global dalam kelas atau konsep ruang nama jika tidak ada gunanya? Ambil variabel anggota statis. Itu sangat menghibur saya karena .. well..Tergantung pada bahasa dan implementasi tentu saja, tetapi secara umum, Anda baru saja menyatakan global. Ya, ada beberapa alasan untuk membungkus konsep non-OO ini dalam pembungkus OO. Salah satunya tentu saja mendokumentasikan kode diri. Itu bisa masuk akal. Jadi .. seperti yang saya katakan. Jangan keluar dan "bebaskan" kode Anda. Tetapi setiap bahasa modern yang bagus akan memiliki konsep global di luar pemodelan OO itu. Ya saya secara khusus bermaksud menunjukkan bahwa bahasa pemrograman OO tanpa konsep global kemungkinan besar memiliki cacat desain yang serius. Sekali lagi .. tergantung pada niat dan desain bahasa jadi saya tidak mencoba untuk memilih bahasa tertentu dan ada terlalu banyak untuk dianalisis di sini. Siapa pun, Pertimbangkan di mana kode itu harus hidup dan menjadi yang paling efektif. Menambahkan sekelompok suar ke sesuatu yang tidak menambah fungsionalitas atau dukungan hanya mengurangi keyboard lebih cepat. Tidak ada gunanya bagi siapa pun. Yah .. kecuali Anda suka poin brownies dari orang yang mungkin salah mengajari Anda bahwa semuanya adalah objek.
Singkatnya, pemrograman tidak hanya mengetuk keyboard tanpa berpikir. Ada banyak pertimbangan desain untuk proyek apa pun. Saya tahu ini klise, tetapi Anda harus melihatnya dari setiap sudut. Bahkan dengan jenis bahasa yang aman saat ini. Anda tidak hanya membuang kode dan mengharapkannya berfungsi dengan baik. Tentu .. ini mungkin berhasil, tetapi mungkin bukan cara yang tepat untuk melakukannya. Secara keseluruhan, pilih bahasa dan format yang paling cocok untuk pekerjaan tertentu DAN lingkungan. Tetapi tidak ada bahasa yang menghilangkan pemikiran di baliknya. Jika Anda tidak berpikir .. Anda hanya mengetik.
sumber
Lima hal yang saya benci tentang Jawa (yang, saat ini, adalah bahasa favorit saya) tanpa urutan tertentu.
sumber
Ruby memiliki banyak kekurangan terkait dengan kecepatannya, tetapi saya tidak membencinya. Ini juga memiliki kekurangan dengan penginjilan komunitas yang berlebihan, tetapi itu tidak terlalu mengganggu saya. Inilah yang saya benci:
Cara block passing ke fungsi dilakukan konyol. Tidak ada alasan blok harus dilewatkan di luar daftar parameter, atau memiliki sintaks khusus ganjil untuk mengakses (menghasilkan). Saya berpendapat bahwa blok seharusnya diberi sintaks yang kurang ambigu (atau hash bisa menggunakan pembatas yang berbeda; mungkin <> daripada {}), dan meneruskan sebagai parameter untuk metode seharusnya sama seperti semua parameter lainnya.
Keanehan ini, seperti blok harus menjadi parameter terakhir yang dilewati dan melewati lebih dari satu blok berbeda dengan sintaks yang lebih lama, benar-benar mengganggu saya.
sumber
Perl
Penggunaan campuran sigils
Misalnya tidak ada yang sama:
Di
Perl6
dalamnya tertulis :Kurangnya OO sejati
Di
Perl6
dalamnya tertulis :Fitur regex yang didesain dengan buruk
Di
Perl6
dalamnya tertulis :Kurangnya beberapa pengiriman
Di
Perl6
dalamnya tertulis :Operator kelebihan muatan
Di
Perl6
dalamnya tertulis :sumber
Saya akan melakukan PHP sesuka saya dan Python akan dilakukan terlalu banyak.
Tidak ada namespace; semuanya ada dalam semacam namespace yang sangat besar yang merupakan neraka di lingkungan yang lebih besar
Kurangnya standar ketika datang ke fungsi: fungsi array mengambil jarum sebagai argumen pertama, tumpukan jerami sebagai argumen kedua (lihat array_search ). Fungsi string sering mengambil tumpukan jerami pertama, jarum kedua (lihat tegap ). Fungsi lain hanya menggunakan skema penamaan yang berbeda: bin2hex , strtolower , cal_to_jd
Beberapa fungsi memiliki nilai pengembalian yang aneh, dari apa yang normal: Ini memaksa Anda untuk memiliki variabel ketiga yang dideklarasikan entah dari mana sementara PHP dapat secara efisien menafsirkan array kosong sebagai false dengan jenis jugglingnya. Hampir tidak ada fungsi lain yang melakukan hal yang sama.
Bahasa (hingga PHP6) melakukan yang terbaik untuk menghormati kompatibilitas mundur yang hampir terbelakang, menjadikannya membawa praktik dan fungsi buruk saat tidak diperlukan (lihat mysql_escape_string vs. mysql_real_escape_string ).
Bahasa berkembang dari bahasa templating ke full-backend. Ini berarti siapa pun dapat mengeluarkan apa pun saat mereka mau, dan itu akan disalahgunakan. Anda berakhir dengan mesin templat untuk bahasa templating ...
Mengisap mengimpor file. Anda memiliki 4 cara berbeda untuk melakukannya (termasuk, include_once, butuhkan, require_once), semuanya lambat, sangat lambat. Bahkan seluruh bahasanya lambat. Setidaknya, lebih lambat dari python (bahkan dengan kerangka kerja) dan RoR dari apa yang saya kumpulkan.
Saya masih suka PHP. Ini adalah gergaji pengembangan web: Anda ingin situs kecil hingga sedang dilakukan dengan sangat cepat dan pastikan siapa pun dapat meng-host-nya (walaupun konfigurasi mungkin berbeda)? PHP ada di sana, dan itu sangat umum di mana hanya membutuhkan 5 menit untuk menginstal tumpukan LAMP atau WAMP penuh. Yah, aku akan kembali bekerja dengan Python sekarang ...
sumber
Berikut adalah beberapa hal yang saya sukai tentang Jawa (yang bukan bahasa favorit saya):
sumber
C ++
Python
sumber
Objektif-C
1) Tidak ada ruang nama, hanya konvensi penamaan manual - Saya tidak keberatan dengan itu dalam hal pemisahan kelas, tapi saya rindu untuk dapat mengimpor semua definisi kelas dalam namespace dalam satu baris (seperti import com.me.somelibrary. *).
2) Perpustakaan masih memiliki beberapa lubang di area penting seperti dukungan RegEx.
3) Properti sintaksis agak canggung, membutuhkan tiga baris (dalam dua file terpisah) untuk mendeklarasikan properti.
4) Saya suka model retain / release, tetapi lebih mudah daripada seharusnya untuk merilis referensi dan kemudian secara tidak sengaja memanfaatkannya nanti.
5) Meskipun sebenarnya bukan fitur bahasa, Xcode sangat terkait dengan penggunaan Objective-C Saya tidak bisa tidak memikirkan aspek itu ... pada dasarnya pelengkapan otomatis, sangat rapuh. Ini lebih seperti sebuah sistem yang memberi penghargaan kepada Anda untuk menemukan sesuatu yang Anda inginkan ada, dan kemudian menyajikannya sebagai pilihan sesudahnya. Tapi saya rasa saya tidak pernah menyukai mesin autocomplete.
sumber
YES/NO
untuk boolean adalah hal yang buruk? Dan yang lebih penting, apakah Anda mengatakan Parameter Bernama adalah hal yang buruk ?? Saya bisa mengerti bools, tetapi param yang dinamai mungkin salah satu fitur terbaik dari ObjC (dalam hal keterbacaan).C ++
String.
Mereka tidak dapat dioperasikan dengan string platform, jadi Anda akhirnya menggunakan std :: vector setengah waktu. Kebijakan salin (salin saat menulis atau salinan dalam) tidak ditentukan, sehingga jaminan kinerja tidak dapat diberikan untuk sintaks langsung. Terkadang mereka bergantung pada algoritma STL yang tidak terlalu intuitif untuk digunakan. Terlalu banyak perpustakaan menggulung sendiri yang sayangnya jauh lebih nyaman untuk digunakan. Kecuali jika Anda harus menggabungkannya.
Berbagai representasi string
Sekarang, ini sedikit masalah platform - tapi saya masih berharap akan lebih baik ketika kelas string standar yang tidak terlalu keras kepala akan tersedia sebelumnya. Representasi string berikut yang sering saya gunakan:
Membangun model.
Saya muak sampai mati dari semua waktu yang dihabiskan untuk berkeliaran dengan siapa-termasuk-apa, deklarasi maju, mengoptimalkan header yang sudah dikompilasi dan termasuk untuk menjaga setidaknya peningkatan waktu membangun tertahankan, dll. Itu hebat di tahun delapan puluhan, tapi sekarang? Ada begitu banyak rintangan untuk mengemas sepotong kode sehingga dapat digunakan kembali sehingga bahkan anjing ibu pun bosan mendengarkan saya.
Sulit untuk diuraikan
Ini membuat alat eksternal sangat sulit untuk ditulis, dan diperbaiki. Dan hari ini, kami para C ++ kurang banyak dalam rantai alat. Saya suka refleksi dan delegasi C # saya, tetapi saya bisa hidup tanpanya. Tanpa refactoring yang bagus, saya tidak bisa.
Threading terlalu sulit
Bahasa bahkan tidak mengenalinya (sekarang), dan kebebasan dari kompiler - meskipun hebat - adalah menyakitkan.
Inisialisasi statis dan sesuai permintaan Secara teknis, saya menipu di sini: ini adalah potongan puzzle lain dalam "bungkus kode untuk digunakan kembali": Adalah mimpi buruk untuk mendapatkan sesuatu yang diinisialisasi hanya ketika diperlukan. Solusi terbaik untuk semua masalah redist lainnya adalah melemparkan semuanya ke header, masalah ini mengatakan "neeener - Anda tidak bisa".
Memang, banyak yang di luar ruang lingkup bahasa yang ketat, tetapi IMO seluruh toolchain perlu dinilai dan perlu berkembang.
sumber
std::string
? mungkin membaca dokumentasi dan / atau tutorial yang baik tentangstd::vector
(dan mengapa Anda tidak seharusnya menggunakannyastd::string
di tempat-tempat di mana ia tidak pernah dirancang untuk) dapat menghapusnya untuk Anda.std::string
jika saya tidak bisa menggunakannya separuh waktu? (C ++ 0x setidaknya memperbaiki itu, tapi saya masih terjebak dengan lusinan perpustakaan yang menggunakan representasi string yang berbeda).but why do we have to bother with them (inclusion guards)
- karena C ++ tidak memiliki modul.How "standard" is a std::string if I can't use it half of the time?
- Saya pikir itu tergantung pada cara Anda menggunakanstd::string
. Kelas string memungkinkan Anda untuk mengakses data stringconst char*
melaluistd::string::c_str
, yang sudah membuatstd::string
sangat kompatibel dengan setiap kelas / fungsi yang juga membutuhkanconst char*
argumen.JavaScript :
The
Object
prototipe dapat dimodifikasi. Setiap objek tunggal dalam program Anda mendapatkan properti baru, dan sesuatu mungkin rusak.Semua objek adalah peta hash, tetapi sulit untuk menggunakannya dengan aman. Khususnya, jika salah satu kunci Anda kebetulan berada
__proto__
, Anda dalam masalah.Tidak ada penutupan objek pada waktu referensi fungsi. Bahkan, tidak ada penutupan objek sama sekali - sebaliknya,
this
diatur setiap kali suatu fungsi dipanggil dengan notasi objek ataunew
operator. Menghasilkan banyak kebingungan, terutama ketika membuat event callback, karenathis
tidak diatur ke apa yang diharapkan oleh programmer.new
hasil operatorthis
disetel sama dengan objek global, menghasilkan banyak kerusakan.Operator tambahan kelebihan beban juga melakukan penggabungan string, meskipun kedua operasi secara fundamental berbeda. Menghasilkan rasa sakit ketika nilai yang Anda harapkan menjadi angka sebenarnya adalah string.
==
dan!=
operator melakukan pemaksaan tipe. Perbandingan antara berbagai jenis melibatkan daftar aturan yang tidak dapat diingat oleh manusia secara penuh. Ini dimitigasi oleh keberadaan===
dan!==
operator.Keduanya
null
danundefined
ada, dengan makna yang agak berbeda, namun berlebihan. Mengapa?Sintaks aneh untuk mengatur rantai prototipe.
parseInt(s)
mengharapkan nomor gaya-C, jadi perlakukan nilai dengan angka nol di depan sebagai oktal, dll. Anda setidaknya bisaparseInt(s, 10)
tetapi perilaku defaultnya membingungkan.Tidak ada ruang lingkup blok.
Dapat mendeklarasikan variabel yang sama lebih dari sekali.
Dapat menggunakan variabel tanpa mendeklarasikannya, dalam hal ini bersifat global dan mungkin merusak program Anda.
with { }
.Sangat sulit untuk didokumentasikan dengan alat seperti JavaDoc.
sumber
null
danundefined
: kadang-kadang Anda benar-benar ingin tahu apakah variabel telah diberi nilai atau tidak. Karena null adalah nilai, undefined adalah satu-satunya cara untuk mengetahuinya. Memang, satu-satunya waktu saya menemukan ini berguna adalah untuk membuat fungsi pengambil / penyetel.for
sebagai nama variabel."for"
valid sebagai kunci hash.__proto__
bukan kata yang dilindungi undang-undang. Nilai string khusus yang tidak berfungsi seperti yang diharapkan ketika digunakan sebagai kunci hash melanggar harapan yang masuk akal tentang bagaimana array asosiatif bekerja dalam bahasa apa pun. Mereka juga melanggar spesifikasi EcmaScript.newline may or may not end a statement depending on context
adalah satu dari daftar 5 teratas sayaPython:
__init__
)__getattr__
itu tidak)print
memasukkan file (tetapi mereka memperbaikinya dengan Python 3)sumber
C #
Saya berharap saya bisa
switch()
pada tipe apa pun, dan itucase
bisa berupa ekspresi apa pun.Tidak dapat menggunakan sintaks penginisialisasi objek dengan bidang /
private set
readoply / autoprops. Secara umum, saya ingin bantuan bahasa untuk membuat jenis yang tidak dapat diubah.Penggunaan
{}
untuk namespace dan kelas dan metode dan blok properti / pengindeks dan blok multi-pernyataan dan inisialisasi array . Membuatnya sulit untuk mengetahui di mana Anda berada saat mereka berjauhan atau tidak cocok.Saya benci menulis
(from x in y ... select).Z()
. Saya tidak ingin harus kembali ke sintaks pemanggilan metode karena sintaks kueri melewatkan sesuatu.Saya ingin
do
klausa pada sintaks kueri, yang sepertiforeach
. Tapi itu sebenarnya bukan permintaan.Saya benar-benar mencapai di sini. Saya pikir C # luar biasa, dan sulit untuk menemukan banyak yang rusak.
sumber
PHP
sumber
C (OK, itu bukan favorit saya, tapi belum selesai.)
EDIT: Saya mungkin bisa menghasilkan lebih banyak jika saya menggunakan lebih banyak kode perpustakaan (seperti yang saya lakukan dengan soket, tetapi itu sangat buruk), tapi saya sudah merasa seperti saya selingkuh karena memilih C. Jadi, ada banyak bahasa hanya untuk mengambil bagian yang baik dari C dan ganti yang buruk itu seperti memukuli kuda mati.
sumber
Gangguan Umum:
sumber
BrainF * ck
Puncak Anda adalah bahwa Anda sedang menyelesaikan Turing ?! Saya dapat melakukan lebih banyak dalam ekspresi reguler Perl!
Kekurangan benda. Ayo, teman-teman! Itu seperti, halo ...
Tidak ada perpustakaan jaringan. Yang saya inginkan adalah mengikis halaman web, GOSH.
Tidak ada fungsi kelas satu. Selamat - Anda bisa bersimpati dengan teman-teman Java Anda.
Pita tanpa batas untuk penyimpanan dan tidak ada yang lain. Ini sangat anal megah sehingga kami mungkin juga menulis Lisp.
sumber
JavaScript
sumber
PHP:
Namun demikian PHP adalah bahasa (scripting). ;-)
sumber
VB6
sumber
Ruby adalah bahasa favorit saya, inilah yang saya tidak suka:
sumber
Delphi:
sumber
JavaScript
Setiap skrip dieksekusi dalam 'namespace' global tunggal ... sesuatu yang harus Anda perhatikan ketika bekerja dengan skrip dari berbagai sumber
Jika variabel digunakan tetapi belum didefinisikan sebelumnya, itu dianggap sebagai variabel global
Vendor peramban membuat standar sesuka mereka, membuat pengkodean bagi kami pengembang menggunakan bahasa yang begitu indah lebih sulit dari yang seharusnya
Case-Sensitivity - mengingat tidak ada IDE yang layak untuk mengembangkan js dengan pengecekan waktu kompilasi
Penanganan masalah (seperti penggunaan
hasOwnProperty
metode) untuk melakukan beberapa operasi sederhana.sumber
Haskell:
($)
operator dapat diubah untuk membuat beberapa ekspresi lebih cantik.Sebagian besar tidak naik ke tingkat kebencian, dan ada orang yang mencoba untuk memperbaiki atau membangun solusi yang solid untuk masing-masing.
Sunting: Ada beberapa kebingungan tentang poin 5. Secara khusus beberapa orang tampaknya berpikir saya maksud urutan argumen, yang saya tidak lakukan. Daripada menjelaskan apa yang saya maksud, saya hanya akan mengarahkan orang ke tautan berikut, http://hackage.haskell.org/trac/haskell-prime/wiki/ChangeDollarAssociativity , yang mengekspresikannya dengan baik.
sumber