Her Programlama Dilinin Türünü Öğrenme


24

Her programcının her tür dilden birini öğrenmesi gerektiğini defalarca duydum. Şimdi, bu mutlaka doğru değil, ama bunun iyi bir fikir olduğuna inanıyorum.

Bir Usul Dili (Perl) öğrendik ama ne olduğunu diğer tür?

Aralarındaki farklar nelerdir ve her birinin örnekleri nelerdir?


8
Dilleri kategorilere ayırmanın sayısız çakışan yolu olduğunun farkında olmalısınız. En yaygın olanı paradigma programlamadır, ancak o zaman bile büyük ve küçük farklılıklar vardır, çoğu tamamen ayrı eksenler ve birçok dil birkaç paradigmaya girer.

1
Kategoriler hakkında unutacağım - eğer bir dilden öğrenmekle gerçekten ilgileniyorsanız, hem Lisp hem de Scala'yı öneririm, eğer bunlarla başa çıkabildiğiniz ikisini halledebilirseniz.
Bill K,

3
Peter Norvig'in tavsiyesi : En az yarım düzine programlama dilini öğrenin. Sınıf soyutlamalarını destekleyen bir dil (Java veya C ++ gibi), biri de işlevsel soyutlamayı destekleyen (Lisp veya ML gibi), diğeri sözdizimsel soyutlamayı destekleyen (Lisp gibi), biri tanımlayıcı özellikleri destekleyen (Prolog veya C ++ şablonları) koroutinleri (Simge veya Şema gibi) ve paralelliği destekleyen (Sisal gibi).
legends2k

Yanıtlar:


34

Terminoloji standardize olmaktan uzak olsa da, büyük programlama paradigmalarını kategorize etmenin ortak bir yolu

  • Usul
  • Fonksiyonel
  • Mantıksal
  • Nesne odaklı
  • genel

Prosedürel programlamanın nasıl bir şey olduğunu zaten biliyor gibisiniz.

Gelen fonksiyonel dillerde fonksiyonlar birinci sınıf nesneleri olarak kabul edilir. Başka bir deyişle, bir işlevi başka bir işleve argüman olarak iletebilir veya bir işlev başka bir işlev döndürebilir. İşlevsel paradigma, lambda hesabına dayanır ve işlevsel dil örnekleri LISP, Şema ve Haskel'dir. İlginçtir, JavaScript ayrıca işlevsel programlamayı da destekler.

Gelen mantıksal programlama aşağıdaki gibi kuruluşlar arasındaki ilişkileri açıklayan yüklemler'ıN tanımlamak president(Obama, USA)veya president(Medvedev, Russia). Bu tahminler çok karmaşık olabilir ve sadece değişmez değerleri değil değişkenleri içerir. Tüm öngörülerinizi belirledikten sonra, sisteminizle ilgili sorular sorabilir ve mantıksal olarak tutarlı cevaplar alabilirsiniz.

Mantıksal programlamadaki büyük fikir, bilgisayara bir şeylerin nasıl hesaplanacağını söylemek yerine, ona şeylerin ne olduğunu söylemektir . Örnek: PROLOG.

Nesneye yönelik paradigma, bir şekilde prosedürel programlamanın bir uzantısıdır. Prosedürel programlamada, tamsayılı ve değişkenler gibi ilkel türler, diziler veya listeler gibi bileşik türler ve yapılar gibi kullanıcı tanımlı türler olabilir. Ayrıca veriler üzerinde çalışan prosedürleriniz de vardır. Buna karşılık, OO'da hem verileri hem de prosedürleri içeren nesnelere sahipsiniz. Bu, kapsülleme, kalıtım ve polimorfizm gibi güzel şeylere sahip olmanızı sağlar. Örnekler: Smalltalk, C ++, Java, C #.

Genel programlama ilk olarak Ada'da 1983 yılında tanıtıldı ve C ++ 'da şablonların tanıtılmasından sonra yaygınlaştı. Bu, üzerinde çalıştığı gerçek veri türlerini belirtmeden kod yazabilmeniz ve derleyicinin çözmesini sağlamaktır. Mesela yazmak yerine

void swap(int, int);
void swap(float, float);
....

sen yaz

void swap(T, T);

bir kez ve derleyicide, ne olursa olsun T, kodda kullanıldığında ne olacağı için belirli bir kod oluşturmasını sağlayın swap().

Genel programlama, C ++, Java ve C # ile farklı derecelerde desteklenir.

C ++ gibi birçok dilin birden fazla paradigmayı desteklediğine dikkat etmek önemlidir. Bir dilin belirli bir paradigmayı desteklediği söylendiğinde bile, paradigmanın tüm özelliklerini desteklemeyeceği doğrudur. Belirli bir paradigma için hangi özelliklerin gerekli olduğu konusunda çok fazla anlaşmazlık olduğunu söylemeye gerek yok.


2
SQL hangi kategoriye girer?
Kirk Kuykendall

@KirkKuykendall SQL uzman veya "küçük" bir dil olabilir.
Kevin Lacquement

17
SQL bir bildirim dilidir. Ne istediğini söyle, nasıl elde edileceğini çözer. (Prolog gibi "Mantıksal" diller, Bildirim dillerinin farklı bir alt kümesidir)
Izkata

3
Yanıtı daha eksiksiz hale getirmek için bir prosedür tanımı yapabilir miyiz?
Deworde

3
@Dima Güzel özeti. Bununla birlikte, nispeten küçük bir nitpick: "jenerik programlama", C ++ 'daki şablonların kullanımından kaynaklanmamıştır ve Haskell gibi işlevsel dillerde de sıklıkla kullanılmaktadır.
Andres F.

11

Programlama dilleri çoğunlukla ortogonal özelliklere sahiptir; en belirgin olanı destekledikleri paradigma veya paradigmalar. Wikipedia makale etraflıca paradigmaları kapsar; en önemli paradigmalar muhtemelen şudur:

  • Usul / Yapısal
  • Fonksiyonel
  • Nesne odaklı
  • Etkinlik Odaklı ve Yön Odaklı
  • genel
  • Mantık

Ancak diller başka şekillerde de farklılık gösterir:

  • Yazma sistemi (dinamik ve statik yazım, güçlü ve zayıf yazım türleri)
  • Derleme süreci ve çalışma zamanı ortamı (yorumlandı, bytecode-derlendi, tamamen derlendi)
  • Bellek yönetimi (C / C ++ gibi manuel, Java gibi zorunlu otomatik çöp toplama, D gibi isteğe bağlı GC, ...)
  • Değerlendirme disiplini (istekli ve tembel istekli; çoğu dil varsayılan olarak isteklidir, ancak pek çoğu tembel yapılar sunar)
  • Kapsam belirleme kuralları (kapsamın PHP, Javascript ve C, sözdizimi açısından oldukça benzer olan üç dilde nasıl çalıştığını karşılaştırın)

2

Şu anda moda olan birkaç farklı programlama paradigması vardır:

  • Nesneye Dayalı - VB.NET, C #, Java bu kategoriye girer. Kod, davranışları ve ilgili verileri olan ve mesajları ileterek birbirleriyle iletişim kuran nesnelerin etrafında düzenlenir.
  • Fonksiyonel - Haskel, Şema, Lisp ve F # bu kategoriye girer. Yan etkisi olmayan saf fonksiyonlar. Matematikteki gibi fonksiyonları düşünün. Genellikle biri dili kendi yapılarıyla uzatabilir.

Bunlar sadece diğer tipler mi?
Dinamik

@ perl.j - Hayır, ancak bunlar günümüzde yaygın yayılmanın görüldüğü başlıcaları. Wikipedia bakınız - Programlama paradigması .
Oded

@ perl.j ayrıca Stack-tabanlıdır: Forth ve Postscript gibi. Mantık: Prolog gibi.
Jetti,

2
Ve sıfırıncı C tipidir;)
yati sagade

Asıl soru, bunların çoğunun programlama problemlerinin çoğunu etkin bir şekilde kodlamak için ihtiyaç duyduğu şeydir.
JeffO

0

Prolog bir mantık programlama dilidir ve başlamak için nispeten kolaydır. Prosedürel programlamaya göre tamamen farklı bir düşünce gerektirir, bu yüzden beyninizi ne zaman uzatmaya çalıştığınızı araştırmak iyidir.

Eğer üniversiteye gidecekseniz , farklı programlama dilleri ve en çok ne için kullanıldıklarını tanıtmaya yönelik Programlama Dilleri hakkında bir kurs almalısınız .


0

Çoğu ana dil zorunlu, işlevsel ve bildirimsel programlamanın özelliklerini bir araya getirir. Niş dilleri daha egzotik olma eğilimindedir veya bir nedenden ötürü genel amaçlı programlama için uygun olmayan ilginç yeni fikirler sunar. Bazı, hiçbir şekilde ayrıntılı değil, örnekler:

  • Elektronik Tablo Dilleri (Excel, Google Formlar): Tablo verilerini işlemek için tasarlanmıştır.
  • Dizi Dilleri (APL, J): Çok boyutlu dizileri hızlıca işlemek için tasarlanmıştır. J'de, (+/ % #)&.:*:bir dizinin RMS'sini hesaplar. Özlü olduğu için meşhur, okunamadığı için meşhur.
  • Otomasyon Dilleri (AutoHotkey, Bash): Form doldurma, dosya yükleme vb. Gibi genel görevleri kolaylaştırmak için tasarlanmıştır.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.