\chapter{Programmiersprachen} Im folgenden werden einige Begriffe definiert anhand derer Programmiersprachen unterschieden werden können. \section{Paradigmen} Die grundlegendste Art, wie man Programmiersprachen unterscheiden kann ist das sog. \enquote{Programmierparadigma}, also die Art wie man Probleme löst. \begin{definition}[Imperatives Paradigma]\xindex{Programmierung!imperative} In der imperativen Programmierung betrachtet man Programme als eine folge von Anweisungen, die vorgibt auf welche Art etwas Schritt für Schritt gemacht werden soll. \end{definition} \begin{definition}[Prozedurales Paradigma]\xindex{Programmierung!prozedurale} Die prozeduralen Programmierung ist eine Erweiterung des imperativen Programmierparadigmas, bei dem man versucht die Probleme in kleinere Teilprobleme zu zerlegen. \end{definition} \begin{definition}[Funktionales Paradigma]\xindex{Programmierung!funktionale} In der funktionalen Programmierung baut man auf Funktionen und ggf. Funktionen höherer Ordnung, die eine Aufgabe ohne Nebeneffekte lösen. \end{definition} \section{Typisierung} Eine weitere Art, Programmiersprachen zu unterscheiden ist die stärke ihrer Typisierung. \begin{definition}[Dynamische Typisierung]\xindex{Typisierung!dynamische} Bei dynamisch typisierten Sprachen kann eine Variable ihren Typ ändern. \end{definition} Beispiele sind Python und PHP. \begin{definition}[Statische Typisierung]\xindex{Typisierung!statische} Bei statisch typisierten Sprachen kann eine niemals ihren Typ ändern. \end{definition} Beispiele sind C, Haskell und Java.