fixed some typos in German translation

This commit is contained in:
caminsha 2020-02-09 23:20:16 +01:00
parent c7e03628fc
commit 5c06bbba57

View File

@ -26,7 +26,7 @@ Die D-Sprache ist eine moderne, überall einsetzbare programmiersprache die von
Low bis High Level verwendet werden kann und dabei viele Stile anbietet. Low bis High Level verwendet werden kann und dabei viele Stile anbietet.
D wird aktiv von Walter Bright und Andrei Alexandrescu entwickelt, zwei super schlaue, D wird aktiv von Walter Bright und Andrei Alexandrescu entwickelt, zwei super schlaue,
richtig coole leute. Da das jetzt alles aus dem weg ist - auf zu den Beispielen! richtig coole leute. Da das jetzt alles aus dem Weg ist - auf zu den Beispielen!
```c ```c
import std.stdio; import std.stdio;
@ -38,7 +38,7 @@ void main() {
writeln(i); writeln(i);
} }
auto n = 1; // auto um den typ vom Compiler bestimmen zu lassen auto n = 1; // auto um den Typ vom Compiler bestimmen zu lassen
// Zahlenliterale können _ verwenden für lesbarkeit // Zahlenliterale können _ verwenden für lesbarkeit
while(n < 10_000) { while(n < 10_000) {
@ -68,21 +68,22 @@ void main() {
} }
``` ```
Neue Typen können mit `struct`, `class`, `union`, und `enum` definiert werden. Structs und unions Neue Typen können mit `struct`, `class`, `union`, und `enum` definiert werden.
werden as-value (koppiert) an methoden übergeben wogegen Klassen als Referenz übergeben werden. Structs und unions werden as-value (koppiert) an Methoden übergeben wogegen
Templates können verwendet werden um alle typen zu parameterisieren. Klassen als Referenz übergeben werden. Templates können verwendet werden um
alle Typen zu parameterisieren.
```c ```c
// Hier, T ist ein Type-Parameter, Er funktioniert wie Generics in C#/Java/C++ // Hier, T ist ein Type-Parameter, Er funktioniert wie Generics in C#/Java/C++
struct LinkedList(T) { struct LinkedList(T) {
T data = null; T data = null;
LinkedList!(T)* next; // Das ! wird verwendet um T zu übergeben. (<T> in C#/Java/C++) LinkedList!(T)* next; // Das ! wird verwendet, um T zu übergeben. (<T> in C#/Java/C++)
} }
class BinTree(T) { class BinTree(T) {
T data = null; T data = null;
// Wenn es nur einen T parameter gibt können die Klammern um ihn weggelassen werden // Wenn es nur einen T Parameter gibt, können die Klammern um ihn weggelassen werden
BinTree!T left; BinTree!T left;
BinTree!T right; BinTree!T right;
} }
@ -97,7 +98,7 @@ enum Day {
Saturday, Saturday,
} }
// Aliase können verwendet werden um die Entwicklung zu erleichtern // Aliase können verwendet werden, um die Entwicklung zu erleichtern
alias IntList = LinkedList!int; alias IntList = LinkedList!int;
alias NumTree = BinTree!double; alias NumTree = BinTree!double;
@ -111,8 +112,8 @@ T max(T)(T a, T b) {
return a; return a;
} }
// Steht ref vor einem Parameter wird sichergestellt das er als Referenz übergeben wird. // Steht ref vor einem Parameter, wird sichergestellt, dass er als Referenz
// Selbst bei werten wird es immer eine Referenz sein. übergeben wird. Selbst bei Werten wird es immer eine Referenz sein.
void swap(T)(ref T a, ref T b) { void swap(T)(ref T a, ref T b) {
auto temp = a; auto temp = a;
@ -120,18 +121,18 @@ void swap(T)(ref T a, ref T b) {
b = temp; b = temp;
} }
// Templates können ebenso werte parameterisieren. // Templates können ebenso Werte parameterisieren.
class Matrix(uint m, uint n, T = int) { class Matrix(uint m, uint n, T = int) {
T[m] rows; T[m] rows;
T[n] columns; T[n] columns;
} }
auto mat = new Matrix!(3, 3); // Standardmäßig ist T vom typ Integer auto mat = new Matrix!(3, 3); // Standardmäßig ist T vom Typ Integer
``` ```
Wo wir schon bei Klassen sind - Wie wäre es mit Properties! Eine Property Wo wir schon bei Klassen sind - Wie wäre es mit Properties! Eine Property
ist eine Funktion die wie ein Wert agiert. Das gibt uns viel klarere Syntax ist eine Funktion, die wie ein Wert agiert. Das gibt uns viel klarere Syntax
im Stil von `structure.x = 7` was gleichgültig wäre zu `structure.setX(7)` im Stil von `structure.x = 7` was gleichgültig wäre zu `structure.setX(7)`
```c ```c
@ -187,18 +188,17 @@ void main() {
``` ```
Mit properties können wir sehr viel logik hinter unseren gettern Mit properties können wir sehr viel logik hinter unseren gettern
und settern hinter einer schönen syntax verstecken und settern hinter einer schönen Syntax verstecken
Other object-oriented goodies at our disposal
Andere Objektorientierte features sind beispielsweise Andere Objektorientierte features sind beispielsweise
`interface`s, `abstract class` und `override`. `interface`s, `abstract class` und `override`.
Vererbung funktioniert in D wie in Java: Vererbung funktioniert in D wie in Java:
Erben von einer Klasse, so viele interfaces wie man will. Erben von einer Klasse, so viele Interfaces wie man will.
Jetzt haben wir Objektorientierung in D gesehen aber schauen Jetzt haben wir Objektorientierung in D gesehen, aber schauen
wir uns noch was anderes an. wir uns noch was anderes an.
D bietet funktionale programmierung mit _first-class functions_ D bietet funktionale Programmierung mit _first-class functions_
puren funktionen und unveränderbare daten. puren Funktionen und unveränderbaren Daten.
Zusätzlich können viele funktionale Algorithmen wie z.B Zusätzlich können viele funktionale Algorithmen wie z.B
map, filter, reduce und friends im `std.algorithm` Modul gefunden werden! map, filter, reduce und friends im `std.algorithm` Modul gefunden werden!
@ -207,11 +207,11 @@ import std.algorithm : map, filter, reduce;
import std.range : iota; // builds an end-exclusive range import std.range : iota; // builds an end-exclusive range
void main() { void main() {
// Wir wollen die summe aller quadratzahlen zwischen // Wir wollen die Summe aller Quadratzahlen zwischen
// 1 und 100 ausgeben. Nichts leichter als das! // 1 und 100 ausgeben. Nichts leichter als das!
// Einfach eine lambda funktion als template parameter übergeben // Einfach eine Lambda-Funktion als Template Parameter übergeben
// Es ist genau so gut möglich eine normale funktion hier zu übergeben // Es ist genau so gut möglich eine normale Funktion hier zu übergeben
// Lambdas bieten sich hier aber an. // Lambdas bieten sich hier aber an.
auto num = iota(1, 101).filter!(x => x % 2 == 0) auto num = iota(1, 101).filter!(x => x % 2 == 0)
.map!(y => y ^^ 2) .map!(y => y ^^ 2)
@ -221,13 +221,13 @@ void main() {
} }
``` ```
Ist dir aufgefallen wie wir eine Haskell-Style pipeline gebaut haben Ist dir aufgefallen, wie wir eine Haskell-Style Pipeline gebaut haben
um num zu berechnen? um num zu berechnen?
Das war möglich durch die Uniform Function Call Syntax. Das war möglich durch die Uniform Function Call Syntax.
Mit UFCS können wir auswählen ob wir eine Funktion als Methode oder Mit UFCS können wir auswählen, ob wir eine Funktion als Methode oder
als freie Funktion aufrufen. Walters artikel dazu findet ihr als freie Funktion aufrufen. Walters artikel dazu findet ihr
[hier.](http://www.drdobbs.com/cpp/uniform-function-call-syntax/232700394) [hier.](http://www.drdobbs.com/cpp/uniform-function-call-syntax/232700394)
Kurzgesagt kann man Funktionen deren erster parameter vom typ A ist, als Kurzgesagt kann man Funktionen, deren erster Parameter vom typ A ist, als
Methode auf A anwenden. Methode auf A anwenden.
Parrallel Computing ist eine Tolle sache, findest du nicht auch? Parrallel Computing ist eine Tolle sache, findest du nicht auch?
@ -239,10 +239,10 @@ import std.math : sqrt;
void main() { void main() {
// Wir wollen die Wurzel von jeder Zahl in unserem Array berechnen // Wir wollen die Wurzel von jeder Zahl in unserem Array berechnen
// und dabei alle Kerne verwenden die wir zur verfügung haben // und dabei alle Kerne verwenden, die wir zur verfügung haben
auto arr = new double[1_000_000]; auto arr = new double[1_000_000];
// Wir verwenden den index und das element als referenz // Wir verwenden den Index und das Element als Referenz
// und rufen einfach parallel auf! // und rufen einfach parallel auf!
foreach(i, ref elem; parallel(arr)) { foreach(i, ref elem; parallel(arr)) {
ref = sqrt(i + 1.0); ref = sqrt(i + 1.0);