Show
Saya melihat istilah-istilah ini di mana-mana dalam pemrograman dan saya memiliki gagasan yang kabur tentang apa artinya. Pencarian menunjukkan kepada saya bahwa hal-hal seperti itu telah ditanyakan di seluruh stack overflow sebenarnya. Sejauh yang saya ketahui, pengetikan Statis / Dinamis dalam bahasa sedikit berbeda dengan pengetikan Kuat / Lemah, tetapi apa perbedaannya adalah di luar jangkauan saya. Sumber yang berbeda tampaknya menggunakan makna yang berbeda atau bahkan menggunakan istilah tersebut secara bergantian. Saya tidak dapat menemukan tempat yang membicarakan keduanya dan sebenarnya menjelaskan perbedaannya. Apa yang akan menyenangkan adalah jika seseorang bisa menjelaskan ini dengan jelas di sini untuk saya dan seluruh dunia. Jawaban:
Lihat halaman wiki untuk informasi lebih detail. Anda telah menemukan titik lemah dalam terminologi yang digunakan amatir untuk berbicara tentang bahasa pemrograman. Jangan menggunakan istilah pengetikan "kuat" dan "lemah" , karena mereka tidak memiliki kesepakatan universal tentang makna teknis. Sebaliknya, pengetikan statis berarti bahwa program diperiksa sebelum dieksekusi , dan suatu program mungkin ditolak sebelum dimulai. Pengetikan dinamis berarti bahwa tipe nilai diperiksa selama eksekusi , dan operasi yang diketik dengan buruk dapat menyebabkan program berhenti atau menandakan kesalahan pada saat dijalankan . Alasan utama untuk pengetikan statis adalah untuk mengesampingkan program yang mungkin memiliki "kesalahan tipe dinamis". Pengetikan yang kuat umumnya berarti bahwa tidak ada celah dalam sistem tipe, sedangkan pengetikan yang lemah berarti sistem tipe dapat ditumbangkan (membatalkan jaminan apa pun). Istilah ini sering digunakan secara tidak benar untuk maksud pengetikan statis dan dinamis. Untuk melihat perbedaannya, pikirkan C: bahasanya dicentang jenisnya pada waktu kompilasi (pengetikan statis), tetapi ada banyak celah; Anda bisa melempar nilai dari tipe apa pun ke tipe lain dengan ukuran yang sama --- khususnya, Anda dapat menggunakan tipe pointer secara bebas. Pascal adalah bahasa yang dimaksudkan untuk diketik dengan kuat tetapi terkenal memiliki celah yang tidak terduga: rekaman varian tanpa tag. Implementasi bahasa yang sangat diketik sering mendapatkan celah dari waktu ke waktu, biasanya sehingga bagian dari sistem run-time dapat
diimplementasikan dalam bahasa tingkat tinggi. Sebagai contoh, Objective Caml memiliki fungsi yang disebut Karena itu, Anda tidak dapat mengandalkan dua orang yang menggunakan kata "kuat" dan "lemah" dengan cara yang persis sama. Jadi hindari mereka. Sederhananya seperti ini: dalam bahasa yang diketik secara statis , jenisnya statis , artinya setelah Anda menetapkan variabel ke suatu jenis, Anda TIDAK BISA mengubahnya. Itu karena mengetik dikaitkan dengan variabel daripada nilai yang dirujuk. Misalnya di Jawa:
Sedangkan dalam bahasa yang diketik secara dinamis , jenisnya dinamis , artinya setelah Anda menetapkan variabel ke suatu jenis, Anda BISA mengubahnya. Itu karena mengetik dikaitkan dengan nilai daripada variabel. Misalnya dengan Python:
Di sisi lain, pengetikan kuat / lemah dalam bahasa terkait dengan konversi tipe implisit (sebagian diambil dari jawaban @ Dario): Misalnya dengan Python:
sedangkan di PHP:
Pengetikan statis memungkinkan untuk memeriksa kebenaran jenis pada waktu kompilasi. Bahasa yang diketik secara statis biasanya dikompilasi, dan bahasa yang diketik secara dinamis ditafsirkan. Oleh karena itu, bahasa yang diketik secara dinamis dapat memeriksa pengetikan saat dijalankan. Lemah mengetik berarti bahwa jenis objek dapat berubah tergantung pada konteksnya. Misalnya dalam bahasa yang diketik dengan lemah, string "123" dapat dianggap sebagai angka 123 jika Anda menambahkan nomor lain ke dalamnya. Contoh bahasa dengan pengetikan lemah adalah bash, awk dan PHP. Jenis lain dari bahasa yang diketik dengan lemah adalah C, di mana data pada alamat memori dapat diperlakukan sebagai jenis yang berbeda dengan casting. Dalam bahasa yang sangat diketik, jenis objek tidak berubah - int selalu int dan mencoba menggunakannya sebagai string akan menghasilkan kesalahan. Baik Java dan Python sangat diketik. Perbedaan antara pengetikan dinamis dan statis adalah ketika aturan tipe diberlakukan. Dalam bahasa yang diketik secara statis, jenis setiap variabel dan parameter harus dideklarasikan di sumber dan diberlakukan pada waktu kompilasi. Dalam bahasa yang diketik secara dinamis, tipe-tipe tersebut hanya diperiksa ketika digunakan saat runtime. Jadi Java diketik secara statis dan Python diketik secara dinamis. Namun batas-batasnya terkadang sedikit buram. Sebagai contoh meskipun Java diketik secara statis, setiap kali Anda menggunakan refleksi atau gips (misalnya ketika menggunakan wadah Obyek) mereka Anda menunda pemeriksaan tipe untuk runtime. Demikian pula bahasa yang paling diketik kuat masih akan secara otomatis mengkonversi antara bilangan bulat dan mengapung (dan dalam beberapa bahasa BigInts presisi abitrary). Hari ini meneliti tentang hal ini saya menemukan artikel hebat ini http://blogs.perl.org/users/ovid/2010/08/what-to-know-before-debating-type-systems.html Ini telah membersihkan banyak hal-hal untuk saya dan saya pikir itu dapat menambah beberapa jawaban besar di atas. Mengetik Kuat dan Lemah:
Tipe Statis dan Dinamis
Jenis Eksplisit / Implisit:
Dari Scott's Programming Language Pragmatics , edisi ke-3 halaman 291, kami miliki
Jadi secara sederhana, pengetikan statis / dinamis mengacu pada waktu ketika pengecekan tipe terjadi: waktu kompilasi untuk pengetikan statis, dan jangka waktu untuk bahasa dinamis. Demikian juga, pengetikan kuat / lemah mengacu pada seberapa agresif suatu bahasa dalam menegakkan sistem tipenya. Saya sudah mencoba menerjemahkan deskripsi Scott ke dalam diagram yang bagus, yang saya posting di bawah ini. Saya pikir kolega lain membuat pekerjaan yang baik esp. menjelaskan perbedaan antara pengetikan statis dan dinamis. Namun sejauh menyangkut pengetikan kuat dan lemah, harus dikatakan bahwa ada perbedaan pemahaman / pandangan. Berikut dua contoh:
Kedua pernyataan tersebut menyoroti bukan ekstrem yang berlawanan dari sistem tipe, tetapi aspek yang sama sekali berbeda. Jadi saya bergabung dengan pandangan Pak Ramsey untuk tidak menggunakan istilah "kuat" dan "lemah" untuk membedakan antara sistem tipe. Statis v / s bahasa yang diketik secara dinamis
Sangat v / s bahasa yang diketik dengan lemah
Bacaan lanjutan yang bagus
Bahasa yang diketik secara statis umumnya mengharuskan Anda untuk mendeklarasikan jenis variabel, yang kemudian diperiksa pada waktu kompilasi untuk mengurangi kesalahan. Kata "statis" dalam "diketik secara statis" mengacu pada "analisis kode statis", yang merupakan proses memeriksa kode sebelum menjalankannya. Meskipun dimungkinkan untuk bahasa yang diketik secara statis untuk menyimpulkan jenis variabel dari sisi kanan ekspresi atau parameter aktual, dalam praktiknya sebagian besar bahasa yang diketik secara statis memerlukan jenis variabel untuk dinyatakan secara eksplisit. Bahasa yang diketik secara dinamis umumnya tidak memerlukan deklarasi variabel untuk memiliki tipe, dan mereka menyimpulkan tipe variabel berdasarkan tipe yang dihitung sebagai hasil dari mengevaluasi sisi kanan setiap pernyataan penugasan atau parameter aktual untuk panggilan fungsi. Karena variabel dapat diberikan beberapa tugas selama masa pakainya, jenisnya dapat berubah dari waktu ke waktu dan inilah mengapa ini disebut "diketik secara dinamis". Selain itu, lingkungan runtime perlu melacak tipe saat ini untuk setiap variabel, sehingga tipe terikat ke nilai daripada dengan deklarasi variabel. Ini dapat dianggap sebagai sistem informasi jenis runtime (RTTI). Elemen bahasa yang diketik secara statis dan dinamis dapat digabungkan. Sebagai contoh, C # mendukung variabel yang diketik secara statis dan dinamis, dan bahasa berorientasi objek umumnya mendukung down-casting hirarki jenis. Bahasa yang diketik secara statis biasanya menyediakan berbagai cara untuk mem-bypass pengecekan jenis, misalnya dengan menggunakan casting, refleksi, dan pemanggilan dinamis. Pengetikan Kuat vs. Lemah mengacu pada rangkaian seberapa banyak bahasa mencoba untuk mencegah bug karena menggunakan variabel seolah-olah itu satu jenis ketika itu sebenarnya jenis lain. Misalnya C dan Java adalah bahasa yang diketik secara statis, namun Java menggunakan pemeriksaan tipe yang jauh lebih kuat daripada C. Kode C berikut senang dikompilasi dan dijalankan, dan akan menempatkan nilai acak ke dalam variabel b pada saat runtime, kemungkinan besar menyebabkan bug:
Kode Java yang setara akan menghasilkan kesalahan kompilasi, yang umumnya lebih disukai:
Jelaskan apa yang dimaksud dengan variabel pada python?Variabel Python
Variabel merupakan tempat penyimpanan data yang bersifat mutable, artinya nilainya bisa berubah-ubah. Variabel dalam python memiliki format penulisan nama_variabel = <nilai>. Variabel dapat berisi teks maupun bilangan.
Apakah variable di Python case sensitive?Penulisanan Nama Variable dalam python adalah case-sensitive, artinya membedakan antara huruf besar dengan huruf kecil.
Sebutkan beberapa hal apa yang harus diperhatikan dalam pemberian nama sebuah variabel pada python?Sebutkan aturan dalam pemberian nama variabel. Nama variable harus diawali dengan huruf atau tanda underscore (_). Nama variable hanya boleh terdiri dari huruf, angka dan underscore saja. ... . Huruf besar dan huruf kecil dianggap berbeda.. Tidak boleh menggunakan nama variable yang dilarang atau reserved.. Apa yang termasuk tipe data di Python?Dalam belajar python, terdapat beberapa tipe data yang biasanya digunakan oleh data enthusiast untuk mengolah suatu data.. Tipe Data Numbers (Numerik). 2. Tipe Data String (Teks). 3. Tipe Data Boolean.. |