it-swarm-id.com

Ada berapa jenis bahasa pemrograman?

Pada dasarnya, saya ingin belajar banyak bahasa pemrograman untuk menjadi programmer yang hebat. Saya hanya tahu sedikit tentang kedalaman dan saya berharap seseorang dapat menguraikan berapa banyak kelas atau jenis bahasa pemrograman ada. Seperti bagaimana Anda akan menyatukannya jika Anda harus mempelajarinya dalam kelompok.

Berasal dari latar belakang Java, saya terbiasa dengan pengetikan statis, tetapi saya tahu bahwa selain pengetikan dinamis juga harus ada variasi dalam bahasa yang tersedia sehingga saya ingin melihat pengelompokan kategori. jika memungkinkan.

30
sova

Itu tergantung pada bagaimana Anda ingin mengklasifikasikan bahasa. Pada dasarnya, bahasa dapat dibagi menjadi dua jenis: imperatif bahasa di mana Anda menginstruksikan komputer bagaimana untuk melakukan tugas, dan deklaratif bahasa tempat Anda memberi tahu komputer apa yang harus dilakukan . Bahasa deklaratif selanjutnya dapat dipecah menjadi fungsional bahasa, di mana program dibangun dengan menyusun fungsi, dan logika bahasa pemrograman, di mana program dibangun melalui serangkaian koneksi logis. Bahasa imperatif lebih banyak membaca seperti daftar langkah-langkah untuk menyelesaikan masalah, seperti resep. Bahasa imperatif meliputi C, C++, dan Java; bahasa fungsional meliputi Haskell; bahasa pemrograman logika termasuk Prolog.

Bahasa imperatif kadang-kadang dipecah menjadi dua subkelompok: prosedural bahasa seperti C, dan bahasa berorientasi objek. Bahasa berorientasi objek sedikit ortogonal untuk pengelompokan, meskipun, karena ada bahasa fungsional berorientasi objek (OCaml dan Scala menjadi contoh).

Anda juga dapat mengelompokkan bahasa dengan mengetik: statis dan dinamis. Bahasa yang diketik secara statis adalah bahasa yang pengetikannya diperiksa (dan biasanya ditegakkan) sebelum menjalankan program (biasanya selama fase kompilasi); bahasa yang diketik secara dinamis menunda pemeriksaan jenis ke runtime. C, C++, dan Java adalah bahasa yang diketik secara statis; Python, Ruby, JavaScript, dan Objective-C adalah bahasa yang diketik secara dinamis. Ada juga tidak diketik bahasa, yang meliputi bahasa pemrograman Forth.

Anda juga dapat mengelompokkan bahasa dengan disiplin pengetikan : lemah pengetikan, yang mendukung konversi jenis implisit, dan kuat mengetik, yang melarang konversi tipe implisit. Garis-garis di antara keduanya agak kabur: menurut beberapa definisi, C adalah bahasa yang diketik dengan lemah, sementara yang lain menganggapnya diketik dengan kuat. Lagipula, mengetikkan disiplin sebenarnya bukan cara yang berguna untuk mengelompokkan bahasa.

73
mipadi
  • Majelis
  • Prosedural
    • Dasar
    • C
  • Berorientasi Objek
    • C #
    • Java
  • Deklaratif
    • Prolog
    • SQL
  • Fungsional
    • PELAT
    • Haskell

Ini adalah yang utama, tetapi ada banyak paradigma lain di luar sana, dan ada banyak tumpang tindih di antara mereka.

12
user1842

Untuk jenis bahasa pemrograman (Paradigma), lihat di sini:
http://en.wikipedia.org/wiki/Programming_paradigm

Untuk karakteristik lain dari bahasa pemrograman (mis. Type Systems), lihat di sini: http://en.wikipedia.org/wiki/Programming_language

11
Robert Harvey

Klik gambar untuk melihat PDF.Programming paradigms poster

Anda harus melihat Pemrograman Paradigma untuk Dummies: Apa Yang Harus Setiap Programmer Tah oleh Peter Van Roy. Ini akan memberi Anda gambaran tentang bagaimana hal itu terjadi di luar.

Jika Anda ingin melangkah lebih jauh, Anda dapat membaca Konsep, Teknik, dan Model Pemrograman Komputer . Anda tidak akan belajar banyak bahasa dengan cara ini, tetapi Anda akan belajar paradigma yang ada di balik berbagai jenis bahasa. Jadi, belajar bahasa baru akan lebih mudah bagi Anda.

9
mmdemirbas
  • Prosedural: Majelis, Java, C #, F #, LISP, Fortran.

  • Diatur berdasarkan: SQL.

  • Berbasis pola: Perl, Regex, Snobol.

  • Berbasis pohon: XSLT.

  • Berbasis array: APL.

6
Tangurena

Ada beberapa cara untuk menjawab ini, tetapi dalam hal mereka dapat dikategorikan sebagai:

Bahasa mesin: Bahasa mesin adalah bahasa pemrograman tingkat rendah. Ini mudah dipahami oleh komputer tetapi sulit dibaca oleh orang-orang. Inilah sebabnya mengapa orang menggunakan bahasa pemrograman tingkat yang lebih tinggi. Program yang ditulis dalam bahasa tingkat tinggi juga dikompilasi dan/atau diinterpretasikan ke dalam bahasa mesin sehingga komputer dapat menjalankannya.

Bahasa assembly: Bahasa assembly adalah representasi dari bahasa mesin. Dengan kata lain, setiap instruksi bahasa Assembly diterjemahkan menjadi instruksi bahasa mesin. Meskipun pernyataan bahasa Majelis dapat dibaca, pernyataan tersebut masih tingkat rendah. Kelemahan dari bahasa Assembly adalah bahwa ia tidak portabel, karena setiap platform dilengkapi dengan Bahasa Assembly tertentu.

Bahasa tingkat tinggi: Bahasa tingkat tinggi adalah apa yang kebanyakan programmer gunakan saat ini. Bahasa seperti C, C++ dan Java adalah semua bahasa tingkat tinggi. Kelebihan bahasa tingkat tinggi adalah bahasa tersebut sangat mudah dibaca dan portabel. Kelemahan dari bahasa tingkat tinggi adalah bahasa kurang kuat daripada Bahasa Majelis. Karena satu pernyataan dalam bahasa tingkat tinggi diterjemahkan ke dalam banyak pernyataan bahasa mesin.

Bahasa tingkat tinggi selanjutnya dapat diklasifikasikan sebagai:

  1. Bahasa fungsional: Dalam bahasa fungsional, sebuah program dibagi ke dalam definisi fungsi. Bahasa fungsional adalah sejenis bahasa deklaratif. Mereka sebagian besar didasarkan pada lambda-calculus yang diketik dengan konstanta. Beberapa bahasa Fungsi yang terkenal adalah Scala, F #, Clojure dan LISP.

  2. Bahasa prosedural: Dalam Bahasa Prosedural, sebuah program ditulis dalam urutan langkah-langkah yang harus diikuti untuk menghasilkan hasil. COBOL, FORTRAN, dan C adalah beberapa bahasa prosedural.

  3. Bahasa Pemrograman Berorientasi Objek: Dalam OOP bahasa, sebuah program dibagi menjadi Objek yang berisi data serta metode yang beroperasi pada data. Java, C # dan C++ adalah OOP bahasa.

  4. Bahasa Pemrograman Logika: Bahasa Logika digunakan untuk membuat program yang memungkinkan komputer untuk berpikir secara logis. mis: Bahasa logika

Untuk studi mendalam, periksa:

4
Badar

Saya cenderung berpikir dalam hal fitur:

Sintaks:

Berbasis C atau apa pun yang Anda miliki. Java memiliki sintaks berbasis C. Saya sangat merekomendasikan mencoba sesuatu seperti Python atau Ruby untuk mengeluarkan pikiran Anda tentang sintaks dan berpikir lebih dalam hal dasar-dasar tentang bagaimana bahasa tertentu bekerja. Saya berpendapat bahwa tidak ada sintaks yang perlu lebih besar daripada berbasis C dan tidak memiliki masalah membangun blok di sekitar ruang putih.

Dikompilasi vs diinterpretasikan dengan Build-Process vs. Interpreted/Console:

Saya memiliki sedikit keakraban dengan waktu kompilasi vs masalah run-time lingkungan tetapi saya mendapatkan bahwa ada banyak masalah di sana yang jarang saya pikirkan.

Demikian juga ada banyak bahasa yang ditafsirkan yang masih memiliki sesuatu proses kompilasi-ish untuk berjalan di dalam mesin virtual seperti Java tidak. Anda masih harus membangun kembali untuk melihat perubahan pada hal-hal.

Dan kemudian ada JavaScript dan Python yang dapat Anda jalankan dengan cepat, perintah demi perintah di konsol di lingkungan langsung. Ketiganya dapat mengarah pada cara penulisan kode yang sangat berbeda.

Pengetikan Dinamis vs. Ketat:

Saya cenderung melihat keduanya sebagai tradeoffs desain. Saat Anda berada di level yang jauh lebih rendah dan kinerja sangat kritis, pengetikan statis sangat masuk akal. Saya tidak pernah mengerti gagasan bahwa seseorang menjadi "lebih aman" daripada yang lain, tetapi saya muncul dalam bahasa yang sangat plastis/dinamis di mana Anda baru saja mempelajari cara kerja sistem pengetikan dan apa yang diharapkan, pada dasarnya. Ketik shenanigans jarang menjadi perhatian saya di JS. Dalam beberapa hal, fleksibilitas dapat membuat segalanya lebih kokoh, meskipun diakui sentuhan yang lebih misterius untuk pengembang level Jr yang lebih banyak jika Anda tidak tahu tentang beberapa lubang pot dalam bahasa tersebut.

Lingkup Tingkat Blok vs. Lingkup Fungsi vs.?:

Block-Level adalah yang paling umum (apa pun di antara {} di sebagian besar bahasa sintaksis berbasis-c). Ruang lingkup JavaScript dibangun di sekitar fungsi (yang juga digunakan untuk membangun objek sehingga objek juga efektif). Ada juga banyak variasi dalam jenis akses apa yang Anda miliki dari lingkup dalam ke luar-lingkup. Saya tidak terbiasa dengan skema pelingkupan lain tapi saya yakin mereka ada.

Klasik OOP vs. Prototypal OOP vs Hampir-OOP (struct di C?) Vs Non-OOP:

Bahkan dalam kelas OOP ada banyak ruang untuk variasi. Apakah Anda dapat melakukan banyak pewarisan (ew, jauh lebih banyak, ew), mendefinisikan antarmuka, dll ...

Dalam JavaScript kami memiliki semacam prototipe hibrida terhambat OOP di mana objek jauh lebih sederhana, sangat bisa berubah, tetapi kami masih memiliki kemampuan untuk memisahkan antarmuka dari masalah internal, yang IMO, adalah aspek penting enkapsulasi.

Hal tentang OOP adalah bahwa ada banyak hal yang dapat Anda lakukan yang pada dasarnya berorientasi pada OOP tanpa secara teknis menjadi OOP. Ada puritan tentu saja tetapi pada akhirnya, Pola Desain adalah tentang mencapai abstraksi tertentu yang bekerja dengan baik dalam situasi tertentu.Jangan terlalu cepat untuk menganggap ide-ide dari bahasa berbasis OOP tidak digunakan dalam sesuatu yang lebih berorientasi pada prosedur. Dan saya tidak berbicara tentang JavaScript. sama sekali tidak dibatasi oleh versi konyol dari prototipe berbasis OOP.

Fungsi Kelas Satu:

Tidak memiliki ini dalam bahasa adalah hal yang sulit bagi saya untuk menyerah. Anda dapat melewati fungsi sekitar seperti data untuk digunakan dalam konteks lain. Hal ini membuat skema penanganan acara khususnya sangat mudah diimplementasikan tetapi juga membuatnya sangat mudah untuk mengadaptasi bahasa untuk bekerja seperti yang Anda inginkan. Ini, lebih dari apa pun yang saya duga, hal yang telah menjadikan JavaScript sukses yang akhirnya telah dirancang meskipun dalam dua minggu dan membuat sintaksis perkiraan Java ditampar sebagai skema pemasaran.

Penutupan:

Saya tidak yakin di mana perdebatannya untuk Java, tapi saya tahu banyak Java devs berteriak-teriak untuk fitur ini satu atau dua tahun yang lalu. Dalam bahasa non-penutupan, ketika fungsi ditutup, apa pun yang entah bagaimana bisa mereferensikan hal-hal dari dalam fungsi itu tidak akan dapat mengaksesnya karena itu adalah sampah yang dikumpulkan.Dalam penutupan, konteks eksekusi terikat sedemikian rupa sehingga jika Anda dapat referensi barang-barang di dalam yang ditutup berfungsi dari ruang lingkup lain seperti pada objek yang dikembalikan atau fungsi Anda pada dasarnya mendapatkan vars seperti ketika fungsi ditutup. Ini seperti macet kaki Anda di pintu pengumpulan sampah, meskipun saya curiga ini diterapkan lebih seperti salinan vars yang dibuat menjadi vars lokal dari entitas yang merujuk.

Kaku/Ketat/Aman vs. Memberi Anda Semua Tali yang Anda Inginkan:

JS devs dan Java devs cenderung tidak saling mengerti sama sekali dan saya pikir ini ada hubungannya dengan dua bahasa yang berada di sisi yang berseberangan dengan spektrum desain khusus ini. "Saya ingin Anda melindungi saya dari diri saya sendiri atau dari para pengembang lain di tim saya. Saya ingin melakukan lebih banyak dalam kode yang lebih sedikit dan melakukan semuanya dengan cara yang sangat berbeda (tetapi konsisten untuk domain tertentu), tergantung pada situasi" Ada pengorbanan mutlak untuk keduanya dan banyak bahasa cenderung jatuh lebih di tengah.

3
Erik Reppen

Saya pikir jalan pintas untuk semua ini adalah belajar cukup LISP untuk melakukan beberapa hal yang berguna. Sebagian besar paradigma ini dimulai sebagai cara menggunakan LISP, jadi ini adalah cara sederhana untuk mencoba berbagai hal.

Ada sejumlah "jenis" bahasa di sekitar, tetapi yang baru selalu dapat muncul. Pada dasarnya, tujuan suatu bahasa adalah untuk memungkinkan penyandian ide, konsep, atau persyaratan, secara langsung. Untuk itu, mungkin ada situasi di mana paradigma yang ada inginkan, dan yang baru mungkin diperlukan.

Salah satu cara untuk melihatnya adalah dalam hal struktur permukaan. Seberapa langsung memungkinkan Anda untuk menyandikan ide secara ringkas, sehingga jika Anda berubah pikiran tentang apa yang Anda inginkan, perubahan yang sesuai dengan kode juga mudah, dengan sedikit peluang untuk memperkenalkan bug.

Cara lain untuk melihatnya adalah dalam hal struktur kontrol. Ketika bahasa dieksekusi (jika itu) apa urutan di mana sesuatu terjadi, untuk mencapai apa yang Anda inginkan? Contohnya adalah: eksekusi langsung, rekursi, backtrack, paralelisme sederhana. Satu I (batuk sederhana) ditemukan adalah eksekusi diferensial .

Sudut pandang lain yang bermanfaat adalah bahwa setiap kali struktur data dirancang, bahasa lahir. Data "dieksekusi" oleh program aplikasi yang menyisirnya dan melakukan hal-hal, sama seperti sebuah program hanya sekelompok data (seperti kode byte) yang digunakan oleh juru bahasa untuk melakukan sesuatu.

2
Mike Dunlavey

Saya harus menambahkan bahwa ada bahasa pemrograman untuk aplikasi tertentu. Salah satu yang muncul di benak saya adalah APT (Automatic Programmed Tool) bahasa yang digunakan dalam pembuatan untuk peralatan mesin.

1
Dave