SlideShare ist ein Scribd-Unternehmen logo
C# Einführung
- Grundlagen der Programmierung Do, Hoang Viet (do@mi.fu-berlin.de)
Draphony Games (http://www.draphony.de)
Grundlagen
04.12.2013

2
Grundbegriffe in der Entwicklung
• Quellcode
 Entwickler schreiben das Programm in einer Programmiersprache. Dieser Text wird
Quellcode genannt.
 Im Gegensatz zur natürlichen Sprache erfüllen Programmiersprache diverse
Anforderungen, die eine weitere maschinelle Verarbeitung erst ermöglich, u.a.
Eindeutigkeit
•

Gegenbeispiel aus Wikipedia: Jeder Mann liebt eine Frau. (Wikipedia Artikel)

• Compiler
 Der Quellcode muss mit Hilfe eines Programms in einer maschinenlesbare Sprache
übersetzt werden.

04.12.2013

3
Demo: „HelloWorld“
04.12.2013

4
Häufig gemachte Fehler
• C# unterscheidet zwischen Groß- und Kleinschreibung (engl. case-sensible)
 Console.WriteLine ist nicht das selbe wie console.writeline

• Absätze wie Leerzeichen, Tabulatoren sind optional
 In den meisten Fällen, lässt sich der Quellcode auch in einer einzigen Zeile schreiben.
(Daran haben später alle Spaß!)

• Eine Anweisung wird mit einem Semikolon beendet
 Console.WriteLine(“Hello World“);
 int a = 10;

• Copy & Paste von Folien
 In Powerpoint werden die Anführungsstriche den Länderspezifischen Normen
angepasst. Derartiges in der Programmierung nicht!
04.12.2013

5
Grundbegriffe in .net
• C# Compiler
 übersetzt Quellcode in CIL – Code

• Common Intermediate Language (CIL, früher MSIL)
 Zwischensprache, indem der Quellcode übersetzt wird
 „Assembler“ von .net

• JIT / Jitter (Just-In-Time compilation)
 Übersetzt den CIL–Code (zur Laufzeit) in maschinennahem Code

• Common Language Runtime (CLR)
 Ausführungsumgebung von .net – Anwendungen

04.12.2013

6
Grundbegriffe in .net
• Garbage Collector (GC)
 Verwaltet den Programmspeicher
 Verhindert „Speicherlecks“

• Framework Class Library (FCL)
 Von .net zur Verfügung gestellte Funktionalitäten
 Auflistung der Klassen (MSDN-Link)

• Common Language Infrastructure (CLI)
 Common Type System (CTS)
 Common Language Specification (CLS)

04.12.2013

7
Microsoft Visual Studio
• Quelldatei (engl. Source File)
 Datei, in dem der C# Code gespeichert wird.
 Diese Datei(en) werden vom Compiler übersetzt

• Projekt (engl. Project)
 Ein Projekt fasst Quelldateien zusammen
 Aus einem Projekt erzeugt Visual Studio eine Assembly (*.exe, *.dll o.ä.)

• Projektmappe (engl. Solution)
 Eine Projektmappe fasst Projekten zusammen
 Beispiel: Microsoft Office als Solution; Powerpoint, Word, etc. sind Projekte

• Entwicklungsumgebung (engl. Integrated Development Enviroment)
 Integriert Entwicklungstools (Compiler, Editor, Debugger, usw.) zu einer Einheit um
den Entwicklungsprozess zu unterstützen

04.12.2013

8
Syntax und Semantik
• Syntax
 Grammatikalische Regeln einer Programmiersprache
 Wird vom Compiler forciert, d.h. Compilerfehler wenn Regel verletzt wird
 Analogie zu natürliche Sprachen:
•

Ein Satz muss immer Subjekt und Prädikat besitzen

• Semantik
 Absicht des Entwickler / Kunden, d.h. was soll das Programm machen.
 Kann nicht überprüft werden
•

Tools für spezielle Bereiche vorhanden.

 Analogie zu natürliche Sprachen:
•

04.12.2013

Die Aussage vom Satz

9
HelloWorld im Detail
04.12.2013

10
Henne – Ei – Problem

04.12.2013

11
Die Klassenmethode „Main“
static void Main(string[] args) {
Console.WriteLine(“Hello World!“);
}
• Einstiegspunkt des Programm.
 Jedes Programm besitzt nur einen Einstiegspunkt
 Im Normalfall definiert jedes Programm nur eine Main – Methode

• Beispiele der Veranstaltung definieren mehrere Main – Methoden!

• Details später im Kapitel „Methoden“
 Parameter an das Programm werden in args gespeichert.
 Die Methode gibt eine ganze Zahl zurück.
•
04.12.2013

Der Wert 0 indiziert eine fehlerfreie Ausführung
12
Quellcode Kommentare
• Lesbarkeit von Quellcode erhöhen
• Kommentare in einem Quellcode werden vom Compiler ignoriert

• Quellcodekommentierung ist eine fundamentale Fertigkeit
• Zeilenkommentar:
 // das ist ein Kommentar

 Inhalt von // bis Zeilenende wird als Kommentar behandelt

• Blockkommentar:
 /* das ist ein Kommentar */

 Inhalt von /* bis zum */ wird als Kommentar behandelt (auch bei Zeilenumbrüchen!)

• Dokumentationskommentare
 Später im Abschnitt „Methoden“
04.12.2013

13
Konsolenausgabe
Console.WriteLine(<ausdruck>);
Console.Write(<ausdruck>);
• Gültige Werte für <ausdruck> sind:
 Strings:
•

Unicode Support

 Gleichungen:
 Platzhalter:
•

Console.WriteLine(“Das ist ein Text“);
Console.WriteLine(1 + 1);

Console.WriteLine(“1 addiert mit 2 ergibt {0}“, 1 + 2);

Alternativmöglichkeit im Tutorium

• Achtung!
 String müssen in Anführungsstrichen geschrieben werden. Ansonsten wird er als
Anweisungen interpretiert, was zu einem Compilerfehler führt.
 Vergleiche:
•
•
04.12.2013

Console.WriteLine(“1 + 1“);
Console.WriteLine(1 + 1);
14
Escape Zeichen
• Wie können Sonderzeichen dargestellt werden?
 Leerzeichen wie Zeilenumbrüche, Tabulatoren
 Internationale Zeichen wie „Một suất thịt chó“ oder chinesische Schriftzeichen

• Escape Zeichen
  Backslash
 “ Anführungsstriche





n
t
v
u

Zeilenumbruch
Tabulator
Vertikale Tabulator
Unicode character (in Hexa FFFF). Bspl: “Pi (u03a0) and Sigma (u03a3)„

 x ASCII (in Hexa FF)

04.12.2013

15
Konsoleneingabe
Console.ReadLine();
• Blockiert die Programmausführung bis zur Benutzereingabe
 Programm rechnet im Hintergrund nichts nebenbei, sondern wartet auf die Eingabe
des Benutzers. Die Blockierung wird erst aufgehoben, wenn der Benutzer die „Enter“
Taste bestätigt.

• Anweisung lässt sich kombinieren:
 Console.WriteLine(Console.ReadLine());

• Was wird bei der folgende Anweisung ausgegeben? Warum?
 Console.WriteLine(“Console.ReadLine()“);

04.12.2013

16
Klasse „Program“
• C# ist eine Objektorientierte Programmiersprache
 Ein Programm ist ein Objekt, das mit anderen Objekten operiert.
 Jedes Objekt gehört zu einer Klasse.
 Analogie zur Welt:
•

Mensch als Klasse

•

Jeder Mensch ist ein Objekt der Klasse Mensch

•

Bei der Geburt wird die Funktion „Main“ aufgerufen. Diese wird bis zum Tot ausgeführt.

• Mehr zu Klassen, Objekte und Methoden später!

04.12.2013

17
Namensräume
• Motivation
 Um Namenskonflikte (2 unterschiedliche Bedeutungen mit dem selben Namen) zu
vermeiden, gibt es hierarchische Benennungsnormen.
 Erklärung am Beispiel: System.Console.WriteLine
•

System

Funktion ist Teil der FCL (Standardfunktionalität von .net)

•

Console

Alle Funktionen bzgl. der Konsole werden in einer Klasse gruppiert

•

WriteLine

eigentliche Funktion

• Abkürzung
 using System;
 danach kann statt System.Console.WriteLine kurz Console.WriteLine
geschrieben werden

• Tutorium:
 Programm schreiben, ohne using zu benutzen
04.12.2013

18
Variablen
04.12.2013

19
Variable: Grundlagen
• Deklaration
 Reservieren von Speichern für die Variable
 datentyp nameDerVariable;
 Beispiel: string name;

• Initialisierung





Zuweisung eines Anfangswertes für die Variable.
Eine Variable muss vorher deklariert werden bevor es initialisiert werden kann.
Allgemeine Syntax: nameDerVariable = wert;
Beispiel: name = „Alf“

• Verknüpfung möglich: Deklaration & Initialisierung
 Beispiel: string name = „alf“;

• Mehrere Variablen deklarieren
 Beispiel: int a, b, c;

• Initialisierung von einem, mehrere oder alle möglich
 Beispiel: int a, b=10, c;
04.12.2013

20
Datentypen
• Zeichenketten
• Boolescher Datentyp
 Einzige mögliche Werte sind true oder false

• Ganzzahlige Datentypen
 Unterscheidungsmerkmal:
•

Wertebereich und Speicherverbrauch

 Vertreter: byte, int, long, usw.

• Fließkommazahlen
 Unterscheidungsmerkmal:
•

Wertebereich, Speicherverbrauch, Genauigkeit nach dem Komma

 Vertreter: float, double, decimal, usw.

• Weiterführend:
 http://msdn.microsoft.com/en-us/library/ms228360%28v=VS.90%29.aspx
 http://msdn.microsoft.com/en-us/library/ya5y69ds.aspx

04.12.2013

21
Ganzzahlige Typen
Datentyp

Speicherbedarf in Byte

Wertebereich

sbyte

1

−27

27 − 1

byte

1

0

28

short

2

−215

215 − 1

ushort

2

0

216

int

4

−231

231 − 1

uint

4

0

232

long

8

−263

263 − 1

ulong

8

0

264

char

2

0

216

Weiterführend: http://msdn.microsoft.com/en-us/library/exx3b86w.aspx

04.12.2013

22
Fließkommazahlen
Datentyp

Speicher

Genauigkeit

Wertebereich

float

4

7 Stellen

±1.5e−45 bis ±3.4e38

double

8

15 – 16 Stellen

±5.0e−324 bis ±1.7e308

decimal

16

28 – 29 Stellen

(-7.9 x 1028 bis 7.9 x 1028) / (100 bis 28)

Weiterführend: http://msdn.microsoft.com/en-us/library/9ahet949.aspx

04.12.2013

23
Variablennamen
• Variablennamen
 müssen mit einem Unterstrich oder einem Buchstaben beginnen
 dürfen Buchstaben (nach Unicode), Ziffern und den Unterstrich enthalten
 dürfen keine Leerzeichen enthalten
 dürfen keine reservierten C# Schlüsselwörter sein (engl. Keywords)
•

Auflistung: http://msdn.microsoft.com/en-us/library/x53a06bb.aspx

 Beispiele: Tồi, ThịtChó,

• Erinnerung: C# unterscheidet zwischen Groß- und Kleinschreibung
 Engl. „case-sensitive“
 Beispiel: 3 völlig unterschiedliche Variable!
•
•

string meineVariable;

•

04.12.2013

int

meinevariable;

bool

MeineVariable;

24
Namenskonvention
• Camel Case (deutsch: Binnenmajuskel)
 Beispiele:
•

personAlter

•

personName,

 Mehrere Wörter zusammen schreiben
 Anfangsbuchstaben werden groß geschrieben
 Allererste Buchstabe wird klein geschrieben

 Eigentlich „lowerCamelCase“

• Pascal Case
 Beispiele:
•

PersonAlter

•

PersonName

 Wie lowerCamelCase, aber allererste Buchstabe wird klein geschrieben
 Eigentlich UpperCamelCase
04.12.2013

25
Namenskonvention
• Ungarische Notation
 „ Charles Simonyi“, Amerikaner mit ungarische Abstammung
 Variablenamen besitzen einen Präfix
•

Datentyp: b, n

•

Verwendungszweck: i (Index), f (Flag)

•

Und weiteres (http://de.wikipedia.org/wiki/Ungarische_Notation)

 Beispiel:
•

bTot, nAlter

• Microsoft Guideline
 Keine ungarische Notation
 Variablen und Parameter in lowerCamelCase
 Methoden, Klassen und Namensräume in UpperCamelCase
 http://msdn.microsoft.com/en-us/library/ms229002.aspx

04.12.2013

26
Variablen: Theorie
• Variablen
 Variablen werden im RAM gespeichert und sind somit „flüchtig“. D.h. Werte gehen
verloren, wenn PC ausgeschaltet wird.

• C# ist eine streng-typisierte Programmiersprache (engl. strongly typed)
 Der Typ einer Variable ist vorher festzulegen (Deklaration) und bleibt danach fest!
 Gegenteil: „schwach-typisiert“ (engl. weak typed)
•

alf = „Alf Mustermann“, alf = 12;

•

Vertreter: PHP, Visual Basic 6, usw.

 In Literaturen auch als „stark typisiert“
 Begriffe: statische Typisierung, dynamische Typisierung

04.12.2013

27
Typumwandlung
• Text in Zahl umwandeln
 In einem String ist die Zahl „8“ ist für den Computer 56
 „56“ für den Computer 2 Zahlen 53 54
•

Parsen nötig!

 <typ>.Parse()
 Beispiel: Int.Parse(„86“)

• Zahl in Text umwandeln
 Beispiel: 56.ToString() oder a.ToString()
 ToString() ist für jeden Datentyp definiert.
 ToString() wird häufig implizit aufgerufen.
•

Beispiel: „1 + 1 = “ + 1

• Umwandeln zwischen verschiedenen Zahlentypen
 Implizite Umwandlung:
•

Von kleineren Typ in größeren Typ (Wertebereich); verlustfreie

 Explizite Umwandlung:
•
•

04.12.2013

Verluste können auftreten
Explizite Angabe nötig: typ a = (typ) b;

28
Demo: Typumwandlung

04.12.2013

29
Wertetypen und Verweistypen
• Wertetyp
 „Primitiven Typen“
 Speichert den Wert
 Werden im Stack
gespeichert
 Beispiel: int, double, char

04.12.2013

• Verweistyp
 „Objekte“
 Speichert eine
Speicheradresse, wo der
eigentliche Wert ist
 „null“ als Wert möglich
 Werden im Heap
gespeichert
 Beispiel: string

30
Deklaration mit implizite Typangabe
• Deklaration von Variablen explizite Typangabe
 Beispiel: var zahl = 1;

• Keine dynamische Typisierung!
 Der Compiler bestimmt zur Kompilierungszeit den Typ

• Konstrukt für anonyme Typen (primär bei LinQ, später)
 Microsoft rät selbst in seiner Guideline davon ab, dieses Konstrukt außerhalb zu
nutzen!
 „Glaubenskrieg“

04.12.2013

31
Operatoren
04.12.2013

32
Assoziation und Priorität
• Definition: Ausdruck
 Ein Ausdruck ist eine Verknüpfung von Variablen, Konstanten und Funktionen durch
Operatoren, die einen Wert zurückliefert.
 Beispiel: a + b, c + 2, 1 + 4 * 3,

• Auswertung von Ausdrücken
 Priorität von Operatoren (engl. precedence)
•

Beispiel: Punktrechnung vor Strichrechnung

 Assoziativität von Operatoren (engl. Associativity)
•
•

Linksassoziativität:
Bei gleiche Priorität, (meisten) von links nach rechts auswerten
Rechtsassoziativität: Bei gleiche Priorität, (meisten) von rechts nach links auswerten

 Klammerungen haben stets Vorrang
 Meisten Operatoren sind linksassoziativ

• Auflistung alle Operatoren (nach Priorität geordnet)
 http://msdn.microsoft.com/en-us/library/ms173145%28v=VS.100%29.aspx
 http://msdn.microsoft.com/en-us/library/6a71f45d.aspx
04.12.2013

33
Arithmetische Operatoren
Operator

Funktion

Beispiel

+

Addition

1+2

3

-

Subtraktion

1–2

1

*

Multiplikation

1*2

2

/

Division

1/2

0

%

Restdivision („Modulo“)

1%2

1

Erläuterung:
• 1 / 2 = 0.5
• 0.5 ist keine ganze Zahl! Nachkommastellen werden einfach
weggeschnitten
• Lösungen
• 1.0 / 2 ?
• 1 / 2.0 ?
• (double) 1 / 2 ?
04.12.2013

34
Operatoren sind kontextabhängig
• Anwendung auf String: „Konkatenation“
 Beispiel: „1 + 1 = “

+ 1 liefert „1 + 1 = 1“

• Anwendung auf Zahlen: „Addition“
 Beispiel: 1 + 1 liefert 2

• Der + Operator hat 2 unterschiedliche Bedeutung, abhängig vom Datentyp

04.12.2013

35
Zusammengesetzte Zuweisungsoperatoren
Operator

Anwendung

Eigentliche Ausdruck

+=

a += 1

a=a+1

-=

a -= 1

a=a–1

*=

a *= 1

a=a*1

/=

a /= 1

a=a/1

%=

a %= 1

a=a%1

Inkrement- und Dekrementoperator
Operator

Anwendung

Eigentliche Ausdruck

++

a++ oder ++a

a=a+1

--

a– oder --a

a=a–1

04.12.2013

36
Demo: x++ Vs. ++x
04.12.2013

37
Boolesche Ausdrücke
(engl. Boolean Expression)
04.12.2013

38
Boolesche Ausdrücke
• Ausgangspunkt: Der Datentyp bool
 Beispiel: bool gK; // true oder false
 Ab wann ist ein Kunde ein „gute Kunde“?

• Kriterien für Beispiel:
 Kunde hat keine Schulden im Schufaverzeichnis
 gK = schufa == 0;
Vergleichsoperator
 Kunde öffnet Konto mit 5000€

Beschreibung

 gK = kapital > 5000;

==

Gleichheit

 Kunde hat festes Einkommen
 gK = hatEinkommen;

!=

Ungleichheit

<

Kleiner

<=

Kleiner gleich

>

Größer

>=

Größer gleich

• Aussagen verknüpfen?
 + Operator ist nicht definiert!
04.12.2013

39
Logische UND
• Syntax:
 Ausdr1 && Ausdr2
 Liefert true zurück, wenn Ausdr1 und Ausdr2 wahr ist. Ansonsten immer false.

• Analogie in natürliche Sprache:
•

„Wenn Ausdr1 und Ausdr2 stimmen“

•

„Wenn sowohl Ausdr1 als auch Ausdr2 stimmen“

• Beispiel:
 gK = schufa == 0 && kapital > 5000;

• Achtung! Wenn schufa != 0 gilt, wird sofort false zurück gegeben und

der Rest ignoriert! Dieser Umstand nennt sich short-circuiting.
 Lösung: Operator & statt && nehmen
04.12.2013

40
Logische ODER
• Syntax:
 Ausdr1 || Ausdr2
 Liefert nur false zurück, wenn Ausdr1 und Ausdr2 falsch sind. Ansonsten immer
true.

• Analogie in natürliche Sprache:
 Nicht mit dem oder aus der natürlichen Sprache verwechseln!
 „Wenn mindesten eines von beiden Aussagen gelten“

• Beispiel:
 gK = schufa == 0 || kapital > 5000;

• Achtung! Wenn schufa == 0 gilt, wird sofort true zurück gegeben und der

Rest ignoriert! Dieser Umstand nennt sich short-circuiting.
 Lösung: Operator | statt || nehmen
04.12.2013

41
Logische NICHT / Negationsoperator
• Syntax:
 !Ausdr1
 Liefert true zurück, wenn Ausdr1 falsch ist. Ansonsten false.

• Analogie in natürliche Sprache:
 „Das Gegenteil“

• Beispiel:
 sK = !(schufa == 0 && kapital > 5000);

• Frage: Ein Kunde ist ein schlechte Kunde, wenn er
 … wenn er einen Schufa Eintrag hat oder einen Startkapital von <5000€
 … wenn er einen Schufa Eintrag hat und einen Startkapital von <5000€

04.12.2013

42
Verzweigungen
(engl. Condition)
04.12.2013

43
Verzweigungen
• if – Anweisung
 Syntax: if (boolesche Ausdruck) { Anweisungen }
 Anweisungen werden nur ausgeführt, wenn der boolesche Ausdruck wahr
(true) ist.
 Der boolesche Ausdruck wird Bedingung genannt.
 Geschweifelten Klammern sind bei Einzelanweisung optional.

• if – else – Anweisung
 Syntax:
if (boolesche Ausdruck) { iAnweisungen }
else { eAnweisungen }

 iAnweisungen werden ausgeführt, wenn die Bedingung erfüllt ist. Ansonsten
werden die eAnweisungen ausgeführt.
 Geschweifelten Klammern sind bei Einzelanweisung optional.

04.12.2013

44
Verzweigungen
• Der bedingte Operator
 boolesche Ausdruck ? iAusdruck : eAusdruck
 Sowohl iAusdruck als auch eAusdruck müssen einen Wert zurückgeben und
dieser muss vom selben Typ sein.
 Beispiel:
•

Console.WriteLine(regen == true ? „Es wird nass.“ :

„nice!“);

• Verschachteln
 Sowohl iAnweisungen als auch eAnweisungen können selbst eine
Verzweigungsanweisung sein und fortführend.

• else – if – Ketten
 Spezielle Form der Verschachtelung um Rechenzeit zu sparen
 Der nächste if Block wird nur ausgeführt, wenn die vorherigen Bedingungen nicht
erfüllt sind.
04.12.2013

45
Demo: „e01_else_if.cs“

04.12.2013

46
Beispiel für switch-case
string wday = Console.ReadLine();
switch (wday) {
case "Monday":
Console.WriteLine("Neue Woche");
break;

case "Freitag":
Console.WriteLine("Wochenende!");
break;
default:
Console.WriteLine("Ungültige Wochentag");
break;
}
04.12.2013

47
switch - Anweisung
• Syntax:
switch(ausdruck) {
case wert1:

break;
case wert2:
break;

// …
default:
break;

}

• Alternative für spezielle else – if – Ketten
• default ist optional
04.12.2013

48
switch - Anweisung
• Jeder case muss mit einem break oder einem goto abgeschlossen werden.
 Außer leere Fälle!

• Für wert1, wert2, usw. müssen konstante Werte eingesetzt werden. Gültig

sind nur ganzzahlige Konstanten und Strings eingesetzt werden.
 Frage: Warum nicht Gleitkommazahlen?
 Antwort: Ungenauigkeit

• Mehr Informationen: http://msdn.microsoft.com/en-us/library/06tc147t.aspx

04.12.2013

49
Demo: „e02_switch.cs“
04.12.2013

50
Schleifen
(engl. Loop)
04.12.2013

51
for – Schleifen
• Syntax:
for(Initialisierung; Iterationsbedingung; Iterationsanweisung) {
Anweisungen

}

• Vor Schleife:
 Initialisierung ausführen

• Bei jedem Schleifendurchlauf wird:
 Davor: Iterationsbedingung prüfen
•
•

Bedingung erfüllt:
Bedingung nicht erfüllt:

Anweisungen ausführen
Code nach Schleife ausführen

 Danach: Iterationsanweisung ausführen

• Ein Schleifendurchgang wird Iteration genannt

04.12.2013

52
Demo: „e03_for.cs“
04.12.2013

53
for – Schleifen
• Alle Variablen, die im Initialisierung deklariert und initialisiert werden,

werden Schleifenvariablen genannt und sind nur innerhalb der Schleife gültig,
indem Sie definiert wurden.
• Sowohl Initialisierung, Iterationsbedingung als auch

Iterationsanweisung sind optional.
• Wenn die Iterationsbedingung nicht spezifiziert ist, wird die Schleife

endlos ausgeführt.
• Die geschweiften Klammern sind optional, wenn nur höchsten eine Anweisung

ausgeführt werden soll.

04.12.2013

54
Alternative Schleifenkonstrukte
• Gleichmächtig mit for – Schleife

• while – Schleife
 Syntax:
•

while(BoolescheAusdruck) { Anweisungen }

• do – while – Schleife
 Mindesten einer Iteration!
 Syntax:
•

do {Anweisungen} while(BoolescheAusdruck);

• Achtung: do-while braucht ein abschließendes Semikolon, aber while nicht.

04.12.2013

55
Demo: „e04_while.cs“
04.12.2013

56
Schleifensteuerung
• break
 Schleifenausführung komplett beenden
 In verschachtelte Schleifen, bezieht break immer nur auf die aktuelle Schleife

• continue
 Bricht die Durchführung der aktuellen Iteration ab.
 In verschachtelte Schleifen, bezieht continue immer nur auf die aktuelle Schleife

• Einsatzgebiet:
 Schleifensteuerungskonstrukte kommen insbesondere bei Endlosschleifen zum
Einsatz

04.12.2013

57
Demo: „e05_break.cs“
04.12.2013

58
Fehlerbehandlung
(engl. Exception Handling)
04.12.2013

59
try - catch
• Syntax:
try {
// …
}
catch(Exception) {
// …
}

• catch – Block wird nur ausgeführt, wenn Fehler auftreten. Man spricht von

„Exceptions geworfen“
• Mehrere catch Blöcke möglich
 Ähnlich wie bei switch – case

04.12.2013

60
Erweiterung: finally
• Anweisungen innerhalb von finally werden immer ausgeführt (ob mit oder ohne

Exception).
• Syntax:
try {
// Tue irgendwas
}
catch {
// Tue das, wenn ein Fehler auftritt
}
finally {
// Tue das auf jedenfall!
}

04.12.2013

61
Demo: „e06_try_c.cs“
04.12.2013

62
Was ist ein Array?
• Problemfrage:
 Große Anzahl an Variablen (Daten) verarbeiten
 Beispiel:
•

Pixel eines Bildes: mehrere Millionen Pixel

•

Native Lösung: Pixel pixel1, pixel2,…,pixel1000000;

• Lösung: Arrays!
 Definition: „Mehrere Variablen desselben Typs, die sich denselben Bezeichner teilen,
werden als Array bezeichnet.“
 Synonym: Datenfelder

04.12.2013

63
Array deklarieren
• Arrays müssen wie Variablen vor Ihrer Nutzung deklariert werden.

• Beispiele:
 int[]
zahlen;
 string[] namen;

• Syntax:
 type[] identifier;

• Vergleich zur Deklaration von Variablen
 int
zahl;
 string

04.12.2013

name;

64
Array initialisieren
• Im Gegensatz zu Variablen müssen, Arrays vor Ihrer Nutzung initialisiert werden.
• Beispiel:
 zahlen
 namen

= new int[10];
= new string[100];

• Syntax:
 identifier = new type[anzahl];
 Selbige Typ von der Deklaration

• Kombinierbar:
 type identifier = new type[anzahl];

• Die einzelnen Variablen des Arrays werden automatisch mit 0, null oder false

abhängig von ihrem Datentyp initialisiert. Die Variablen werden als Elemente
bezeichnet.
04.12.2013

65
Zugriff auf Elemente des Arrays
• Beispiel:
 Console.WriteLine(namen[0]);

• Syntax: Lesezugriff
 identifier[index];

• Syntax: Schreibzugriff
 identifier[index] = wert;

• Die Zählung beginnt mit 0.
• Überschreitet index die Größe vom Array, wirft .net eine Exception zurück
 Schutzmaßnahme gegen Angriffe

04.12.2013

66
Demo: „e01_init.cs“
Arrays deklarieren und initialisieren
Zugriff auf die Elemente vom Array

04.12.2013

67
Wertzuweisung bei der Initialisierung
• Beispiel:
string[] superhelden = new string[4] {
"Bruce Wayne", "Peter Parker", "Clark Kent", "Bruce Banner"
};

•

Syntax
type[] identifier = new type[] {
e1,e2,e3,…
};

•

Unabhängig von der Deklaration möglich
type[] identifier = new type[] {
e1,e2,e3,…
};

•

Dieses Sprachkonstrukt steht nur bei der Initialisierung des Array zur Verfügung!

04.12.2013

68
Initialisierung vom Array und Elementen
• Der Begriff Initialisierung ist bei Arrays zweideutig.
 Initialisierung des Arrays
 Initialisierung der Elemente vom Array.

• Die Deklaration ist nur für das Array selbst notwendig. Die Deklaration der

Elemente ist implizit.
• Technische Details:
 Was passiert bei der Deklaration des Array?
 Was passiert bei der Initialisierung des Array?
 Was passiert bei der Initialisierung der Elemente vom Array?

• Achtung! Die Größe eines Arrays ist fest
 Frage: Größe von Array verändern?
04.12.2013

69
foreach - Schleife
• Funktion:
 Alle Elemente eines Arrays einmal durchlaufen
 Nur Lesezugriff

• Syntax
type array = new type[numb];
foreach(type x in array) { expr }

• Beispiel

foreach (int x in zahlen) {
// Wertezuweisung ist nicht möglich
// x *= 2;
Console.Write(x + "t");
}
04.12.2013

70
Nützliche Funktionen
Funktion

Beschreibung

v.Length

Anzahl vom Array v
Häufig auch als Länge bezeichnet

Array.Sort(v)

Array v sortieren

Array.Sort(k,v)

Array v mit k verknüpfen und v anschließend mit k als
Kriterium sortieren

Array.Reserve(v)

Die Anordnung umkehren

Array.CopyTo(s,si,d,di,n)

Kopiert n Element von Array s (ab Index si) in Array d (ab
Index di)

• Klasse „System.Array“
• Weitere Funktionen verfügbar!
 http://msdn.microsoft.com/en-us/library/system.array.aspx
04.12.2013

71
Demo: „e02_utils.cs“
Anwendung von Standardfunktionalitäten

04.12.2013

72
Array duplizieren
• Achtung! Fehler: (siehe „e03_dupl.cs“)

int[] X = new int[] {
1,2,3,4,5,6,7,8,9
};
int[] Y = X;
• Semantische Fehler!
 Die beiden Verweise X und Y zeigen auf dasselbe Array im Heap.

• Lösung: (Pseudocode)
 Leeren Array erzeugen mit selbige Länge wie Quellarray
 Alle Elemente kopieren

• Oder über v.Clone() und Casten
04.12.2013

73
Demo: „e03_dupl.cs“
Anwendung von Standardfunktionalitäten

04.12.2013

74
Mehrdimensionale Arrays
• Syntax: 2D Array
 type[,] = new type[r,c];

• Beispiel: 2D Array
 byte [,] Bild = new byte[1920, 1080];

• Syntax: 3D Array
 type[,,] = new type[x,y,z];

• Dimension unbegrenzt!

• Vorsicht! Nutzung von n-dimensionale Arrays
 Speicherverbrauch: 𝑑1 ∗ 𝑑2 ∗ 𝑑3 ∗ ⋯ 𝑑 𝑛
 Beispiel: 1 Sekunde HD-Film
•
04.12.2013

1920 ∗ 1080 ∗ 25 = 51.840.000 (ca. 51 MB)
75
Klasse ArrayList
• Abstraktion von einem Array mit variable Länge
• Mischen von Typen innerhalb einer Liste erlaubt: String, int, etc.
• Neues Elemente aufnehmen
 alist.Add(e)
 alist.Insert(pos, e)

e der alist hinzufügen
e der alist an der Position pos hinzufügen

• Elemente aus der Liste löschen
 alist.Remove(e)
 alist.RemoveAt(i)

04.12.2013

Element e aus der Liste entfernen
Element an der Position i entfernen

76
Demo: „e04_alist.cs“
Erstellen einer ArrayList
Hinzufügen und Entfernen von Elementen

04.12.2013

77
Vielen Dank für die
Aufmerksamkeit
http://www.draphony.de
facebook.com/DraphonyGames
04.12.2013

78

Weitere ähnliche Inhalte

PDF
アーキテクチャ決定のお供にLightweight architecture decision records
PPT
Algoritmos 0 - apresentação
PDF
Compiladores 6
PDF
Revisão Sobre Programação Orientada a Objetos com Java
PDF
Grokking Simplicity探訪
PDF
深入淺出 Web 容器 - Tomcat 原始碼分析
PDF
Basic of Basics of Agile Development Returns
PDF
Webデザインのための配色セオリー
アーキテクチャ決定のお供にLightweight architecture decision records
Algoritmos 0 - apresentação
Compiladores 6
Revisão Sobre Programação Orientada a Objetos com Java
Grokking Simplicity探訪
深入淺出 Web 容器 - Tomcat 原始碼分析
Basic of Basics of Agile Development Returns
Webデザインのための配色セオリー

Was ist angesagt? (20)

PDF
Parser combinatorってなんなのさ
PPTX
Lógica de programação { para iniciantes }
PPTX
Python製BDDツールで自動化してみた
PDF
twMVC#44 如何測試與保護你的 web application with playwright
PDF
Laboratório de Programação I: Construção de bibliotecas em C
PDF
Manual de portugol
PPTX
Reunião comercial
PDF
ユーザーにうれしいチャットボットのUX 7原則 - 7 Principles to Design UX of Chatbots
PDF
Microsoft Graph API Library for Go
PDF
桃太郎でわかるオンボーディング
PDF
スクラムパタン入門
PDF
Lista de exercicios vetores, matrizes, registros e sub-algoritmos
PDF
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
PDF
Git超入門_座学編.pdf
PDF
あなたはPO?PM?PdM?PjM?
PPTX
物件導向設計原則:SOLID + DI
PDF
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
ODP
Logica Algoritmo 01 Introducao A Logica
PDF
デザインのためのデザイン
PDF
まじめに!できる!LT
Parser combinatorってなんなのさ
Lógica de programação { para iniciantes }
Python製BDDツールで自動化してみた
twMVC#44 如何測試與保護你的 web application with playwright
Laboratório de Programação I: Construção de bibliotecas em C
Manual de portugol
Reunião comercial
ユーザーにうれしいチャットボットのUX 7原則 - 7 Principles to Design UX of Chatbots
Microsoft Graph API Library for Go
桃太郎でわかるオンボーディング
スクラムパタン入門
Lista de exercicios vetores, matrizes, registros e sub-algoritmos
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
Git超入門_座学編.pdf
あなたはPO?PM?PdM?PjM?
物件導向設計原則:SOLID + DI
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
Logica Algoritmo 01 Introducao A Logica
デザインのためのデザイン
まじめに!できる!LT
Anzeige

Ähnlich wie C Sharp Einfuehrung Teil 1 (20)

PPTX
Workshop: Besseres C#
PDF
Text Template Transformation Toolkit (T4)
PDF
JavaScript für Java-Entwickler W-JAX 2013
PDF
FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Tho...
PDF
Ein Gopher im Netz
PDF
Haxe & NME
PPTX
The Lotus Code Cookbook
PDF
WordPress sprachfähig machen - Lokalisierung Kür oder Krampf? - WordCamp Deut...
PPT
C / C++ Api for Beginners
PDF
Php Schulung
PPT
C API for Lotus Notes & Domino
PDF
Javascript done right
PDF
Was Sie schon immer über barrierefreie PDFs wissen wollten
PDF
Devs@Home - Einführung in Go
PPT
IfN Studienarbeit Abschlusspres 18.9.2007
PPTX
Python Bootcamp - Grundlagen
PPTX
Zentrale Dokumentengenerierung mit dem Open XML SDK
PPTX
Windows Powershell
PPT
Internet und Webdesign (Historisches Dokument)
PPT
Top 10 Internet Trends 2001
Workshop: Besseres C#
Text Template Transformation Toolkit (T4)
JavaScript für Java-Entwickler W-JAX 2013
FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Tho...
Ein Gopher im Netz
Haxe & NME
The Lotus Code Cookbook
WordPress sprachfähig machen - Lokalisierung Kür oder Krampf? - WordCamp Deut...
C / C++ Api for Beginners
Php Schulung
C API for Lotus Notes & Domino
Javascript done right
Was Sie schon immer über barrierefreie PDFs wissen wollten
Devs@Home - Einführung in Go
IfN Studienarbeit Abschlusspres 18.9.2007
Python Bootcamp - Grundlagen
Zentrale Dokumentengenerierung mit dem Open XML SDK
Windows Powershell
Internet und Webdesign (Historisches Dokument)
Top 10 Internet Trends 2001
Anzeige

C Sharp Einfuehrung Teil 1

  • 1. C# Einführung - Grundlagen der Programmierung Do, Hoang Viet (do@mi.fu-berlin.de) Draphony Games (http://www.draphony.de)
  • 3. Grundbegriffe in der Entwicklung • Quellcode  Entwickler schreiben das Programm in einer Programmiersprache. Dieser Text wird Quellcode genannt.  Im Gegensatz zur natürlichen Sprache erfüllen Programmiersprache diverse Anforderungen, die eine weitere maschinelle Verarbeitung erst ermöglich, u.a. Eindeutigkeit • Gegenbeispiel aus Wikipedia: Jeder Mann liebt eine Frau. (Wikipedia Artikel) • Compiler  Der Quellcode muss mit Hilfe eines Programms in einer maschinenlesbare Sprache übersetzt werden. 04.12.2013 3
  • 5. Häufig gemachte Fehler • C# unterscheidet zwischen Groß- und Kleinschreibung (engl. case-sensible)  Console.WriteLine ist nicht das selbe wie console.writeline • Absätze wie Leerzeichen, Tabulatoren sind optional  In den meisten Fällen, lässt sich der Quellcode auch in einer einzigen Zeile schreiben. (Daran haben später alle Spaß!) • Eine Anweisung wird mit einem Semikolon beendet  Console.WriteLine(“Hello World“);  int a = 10; • Copy & Paste von Folien  In Powerpoint werden die Anführungsstriche den Länderspezifischen Normen angepasst. Derartiges in der Programmierung nicht! 04.12.2013 5
  • 6. Grundbegriffe in .net • C# Compiler  übersetzt Quellcode in CIL – Code • Common Intermediate Language (CIL, früher MSIL)  Zwischensprache, indem der Quellcode übersetzt wird  „Assembler“ von .net • JIT / Jitter (Just-In-Time compilation)  Übersetzt den CIL–Code (zur Laufzeit) in maschinennahem Code • Common Language Runtime (CLR)  Ausführungsumgebung von .net – Anwendungen 04.12.2013 6
  • 7. Grundbegriffe in .net • Garbage Collector (GC)  Verwaltet den Programmspeicher  Verhindert „Speicherlecks“ • Framework Class Library (FCL)  Von .net zur Verfügung gestellte Funktionalitäten  Auflistung der Klassen (MSDN-Link) • Common Language Infrastructure (CLI)  Common Type System (CTS)  Common Language Specification (CLS) 04.12.2013 7
  • 8. Microsoft Visual Studio • Quelldatei (engl. Source File)  Datei, in dem der C# Code gespeichert wird.  Diese Datei(en) werden vom Compiler übersetzt • Projekt (engl. Project)  Ein Projekt fasst Quelldateien zusammen  Aus einem Projekt erzeugt Visual Studio eine Assembly (*.exe, *.dll o.ä.) • Projektmappe (engl. Solution)  Eine Projektmappe fasst Projekten zusammen  Beispiel: Microsoft Office als Solution; Powerpoint, Word, etc. sind Projekte • Entwicklungsumgebung (engl. Integrated Development Enviroment)  Integriert Entwicklungstools (Compiler, Editor, Debugger, usw.) zu einer Einheit um den Entwicklungsprozess zu unterstützen 04.12.2013 8
  • 9. Syntax und Semantik • Syntax  Grammatikalische Regeln einer Programmiersprache  Wird vom Compiler forciert, d.h. Compilerfehler wenn Regel verletzt wird  Analogie zu natürliche Sprachen: • Ein Satz muss immer Subjekt und Prädikat besitzen • Semantik  Absicht des Entwickler / Kunden, d.h. was soll das Programm machen.  Kann nicht überprüft werden • Tools für spezielle Bereiche vorhanden.  Analogie zu natürliche Sprachen: • 04.12.2013 Die Aussage vom Satz 9
  • 11. Henne – Ei – Problem 04.12.2013 11
  • 12. Die Klassenmethode „Main“ static void Main(string[] args) { Console.WriteLine(“Hello World!“); } • Einstiegspunkt des Programm.  Jedes Programm besitzt nur einen Einstiegspunkt  Im Normalfall definiert jedes Programm nur eine Main – Methode • Beispiele der Veranstaltung definieren mehrere Main – Methoden! • Details später im Kapitel „Methoden“  Parameter an das Programm werden in args gespeichert.  Die Methode gibt eine ganze Zahl zurück. • 04.12.2013 Der Wert 0 indiziert eine fehlerfreie Ausführung 12
  • 13. Quellcode Kommentare • Lesbarkeit von Quellcode erhöhen • Kommentare in einem Quellcode werden vom Compiler ignoriert • Quellcodekommentierung ist eine fundamentale Fertigkeit • Zeilenkommentar:  // das ist ein Kommentar  Inhalt von // bis Zeilenende wird als Kommentar behandelt • Blockkommentar:  /* das ist ein Kommentar */  Inhalt von /* bis zum */ wird als Kommentar behandelt (auch bei Zeilenumbrüchen!) • Dokumentationskommentare  Später im Abschnitt „Methoden“ 04.12.2013 13
  • 14. Konsolenausgabe Console.WriteLine(<ausdruck>); Console.Write(<ausdruck>); • Gültige Werte für <ausdruck> sind:  Strings: • Unicode Support  Gleichungen:  Platzhalter: • Console.WriteLine(“Das ist ein Text“); Console.WriteLine(1 + 1); Console.WriteLine(“1 addiert mit 2 ergibt {0}“, 1 + 2); Alternativmöglichkeit im Tutorium • Achtung!  String müssen in Anführungsstrichen geschrieben werden. Ansonsten wird er als Anweisungen interpretiert, was zu einem Compilerfehler führt.  Vergleiche: • • 04.12.2013 Console.WriteLine(“1 + 1“); Console.WriteLine(1 + 1); 14
  • 15. Escape Zeichen • Wie können Sonderzeichen dargestellt werden?  Leerzeichen wie Zeilenumbrüche, Tabulatoren  Internationale Zeichen wie „Một suất thịt chó“ oder chinesische Schriftzeichen • Escape Zeichen  Backslash  “ Anführungsstriche     n t v u Zeilenumbruch Tabulator Vertikale Tabulator Unicode character (in Hexa FFFF). Bspl: “Pi (u03a0) and Sigma (u03a3)„  x ASCII (in Hexa FF) 04.12.2013 15
  • 16. Konsoleneingabe Console.ReadLine(); • Blockiert die Programmausführung bis zur Benutzereingabe  Programm rechnet im Hintergrund nichts nebenbei, sondern wartet auf die Eingabe des Benutzers. Die Blockierung wird erst aufgehoben, wenn der Benutzer die „Enter“ Taste bestätigt. • Anweisung lässt sich kombinieren:  Console.WriteLine(Console.ReadLine()); • Was wird bei der folgende Anweisung ausgegeben? Warum?  Console.WriteLine(“Console.ReadLine()“); 04.12.2013 16
  • 17. Klasse „Program“ • C# ist eine Objektorientierte Programmiersprache  Ein Programm ist ein Objekt, das mit anderen Objekten operiert.  Jedes Objekt gehört zu einer Klasse.  Analogie zur Welt: • Mensch als Klasse • Jeder Mensch ist ein Objekt der Klasse Mensch • Bei der Geburt wird die Funktion „Main“ aufgerufen. Diese wird bis zum Tot ausgeführt. • Mehr zu Klassen, Objekte und Methoden später! 04.12.2013 17
  • 18. Namensräume • Motivation  Um Namenskonflikte (2 unterschiedliche Bedeutungen mit dem selben Namen) zu vermeiden, gibt es hierarchische Benennungsnormen.  Erklärung am Beispiel: System.Console.WriteLine • System Funktion ist Teil der FCL (Standardfunktionalität von .net) • Console Alle Funktionen bzgl. der Konsole werden in einer Klasse gruppiert • WriteLine eigentliche Funktion • Abkürzung  using System;  danach kann statt System.Console.WriteLine kurz Console.WriteLine geschrieben werden • Tutorium:  Programm schreiben, ohne using zu benutzen 04.12.2013 18
  • 20. Variable: Grundlagen • Deklaration  Reservieren von Speichern für die Variable  datentyp nameDerVariable;  Beispiel: string name; • Initialisierung     Zuweisung eines Anfangswertes für die Variable. Eine Variable muss vorher deklariert werden bevor es initialisiert werden kann. Allgemeine Syntax: nameDerVariable = wert; Beispiel: name = „Alf“ • Verknüpfung möglich: Deklaration & Initialisierung  Beispiel: string name = „alf“; • Mehrere Variablen deklarieren  Beispiel: int a, b, c; • Initialisierung von einem, mehrere oder alle möglich  Beispiel: int a, b=10, c; 04.12.2013 20
  • 21. Datentypen • Zeichenketten • Boolescher Datentyp  Einzige mögliche Werte sind true oder false • Ganzzahlige Datentypen  Unterscheidungsmerkmal: • Wertebereich und Speicherverbrauch  Vertreter: byte, int, long, usw. • Fließkommazahlen  Unterscheidungsmerkmal: • Wertebereich, Speicherverbrauch, Genauigkeit nach dem Komma  Vertreter: float, double, decimal, usw. • Weiterführend:  http://msdn.microsoft.com/en-us/library/ms228360%28v=VS.90%29.aspx  http://msdn.microsoft.com/en-us/library/ya5y69ds.aspx 04.12.2013 21
  • 22. Ganzzahlige Typen Datentyp Speicherbedarf in Byte Wertebereich sbyte 1 −27 27 − 1 byte 1 0 28 short 2 −215 215 − 1 ushort 2 0 216 int 4 −231 231 − 1 uint 4 0 232 long 8 −263 263 − 1 ulong 8 0 264 char 2 0 216 Weiterführend: http://msdn.microsoft.com/en-us/library/exx3b86w.aspx 04.12.2013 22
  • 23. Fließkommazahlen Datentyp Speicher Genauigkeit Wertebereich float 4 7 Stellen ±1.5e−45 bis ±3.4e38 double 8 15 – 16 Stellen ±5.0e−324 bis ±1.7e308 decimal 16 28 – 29 Stellen (-7.9 x 1028 bis 7.9 x 1028) / (100 bis 28) Weiterführend: http://msdn.microsoft.com/en-us/library/9ahet949.aspx 04.12.2013 23
  • 24. Variablennamen • Variablennamen  müssen mit einem Unterstrich oder einem Buchstaben beginnen  dürfen Buchstaben (nach Unicode), Ziffern und den Unterstrich enthalten  dürfen keine Leerzeichen enthalten  dürfen keine reservierten C# Schlüsselwörter sein (engl. Keywords) • Auflistung: http://msdn.microsoft.com/en-us/library/x53a06bb.aspx  Beispiele: Tồi, ThịtChó, • Erinnerung: C# unterscheidet zwischen Groß- und Kleinschreibung  Engl. „case-sensitive“  Beispiel: 3 völlig unterschiedliche Variable! • • string meineVariable; • 04.12.2013 int meinevariable; bool MeineVariable; 24
  • 25. Namenskonvention • Camel Case (deutsch: Binnenmajuskel)  Beispiele: • personAlter • personName,  Mehrere Wörter zusammen schreiben  Anfangsbuchstaben werden groß geschrieben  Allererste Buchstabe wird klein geschrieben  Eigentlich „lowerCamelCase“ • Pascal Case  Beispiele: • PersonAlter • PersonName  Wie lowerCamelCase, aber allererste Buchstabe wird klein geschrieben  Eigentlich UpperCamelCase 04.12.2013 25
  • 26. Namenskonvention • Ungarische Notation  „ Charles Simonyi“, Amerikaner mit ungarische Abstammung  Variablenamen besitzen einen Präfix • Datentyp: b, n • Verwendungszweck: i (Index), f (Flag) • Und weiteres (http://de.wikipedia.org/wiki/Ungarische_Notation)  Beispiel: • bTot, nAlter • Microsoft Guideline  Keine ungarische Notation  Variablen und Parameter in lowerCamelCase  Methoden, Klassen und Namensräume in UpperCamelCase  http://msdn.microsoft.com/en-us/library/ms229002.aspx 04.12.2013 26
  • 27. Variablen: Theorie • Variablen  Variablen werden im RAM gespeichert und sind somit „flüchtig“. D.h. Werte gehen verloren, wenn PC ausgeschaltet wird. • C# ist eine streng-typisierte Programmiersprache (engl. strongly typed)  Der Typ einer Variable ist vorher festzulegen (Deklaration) und bleibt danach fest!  Gegenteil: „schwach-typisiert“ (engl. weak typed) • alf = „Alf Mustermann“, alf = 12; • Vertreter: PHP, Visual Basic 6, usw.  In Literaturen auch als „stark typisiert“  Begriffe: statische Typisierung, dynamische Typisierung 04.12.2013 27
  • 28. Typumwandlung • Text in Zahl umwandeln  In einem String ist die Zahl „8“ ist für den Computer 56  „56“ für den Computer 2 Zahlen 53 54 • Parsen nötig!  <typ>.Parse()  Beispiel: Int.Parse(„86“) • Zahl in Text umwandeln  Beispiel: 56.ToString() oder a.ToString()  ToString() ist für jeden Datentyp definiert.  ToString() wird häufig implizit aufgerufen. • Beispiel: „1 + 1 = “ + 1 • Umwandeln zwischen verschiedenen Zahlentypen  Implizite Umwandlung: • Von kleineren Typ in größeren Typ (Wertebereich); verlustfreie  Explizite Umwandlung: • • 04.12.2013 Verluste können auftreten Explizite Angabe nötig: typ a = (typ) b; 28
  • 30. Wertetypen und Verweistypen • Wertetyp  „Primitiven Typen“  Speichert den Wert  Werden im Stack gespeichert  Beispiel: int, double, char 04.12.2013 • Verweistyp  „Objekte“  Speichert eine Speicheradresse, wo der eigentliche Wert ist  „null“ als Wert möglich  Werden im Heap gespeichert  Beispiel: string 30
  • 31. Deklaration mit implizite Typangabe • Deklaration von Variablen explizite Typangabe  Beispiel: var zahl = 1; • Keine dynamische Typisierung!  Der Compiler bestimmt zur Kompilierungszeit den Typ • Konstrukt für anonyme Typen (primär bei LinQ, später)  Microsoft rät selbst in seiner Guideline davon ab, dieses Konstrukt außerhalb zu nutzen!  „Glaubenskrieg“ 04.12.2013 31
  • 33. Assoziation und Priorität • Definition: Ausdruck  Ein Ausdruck ist eine Verknüpfung von Variablen, Konstanten und Funktionen durch Operatoren, die einen Wert zurückliefert.  Beispiel: a + b, c + 2, 1 + 4 * 3, • Auswertung von Ausdrücken  Priorität von Operatoren (engl. precedence) • Beispiel: Punktrechnung vor Strichrechnung  Assoziativität von Operatoren (engl. Associativity) • • Linksassoziativität: Bei gleiche Priorität, (meisten) von links nach rechts auswerten Rechtsassoziativität: Bei gleiche Priorität, (meisten) von rechts nach links auswerten  Klammerungen haben stets Vorrang  Meisten Operatoren sind linksassoziativ • Auflistung alle Operatoren (nach Priorität geordnet)  http://msdn.microsoft.com/en-us/library/ms173145%28v=VS.100%29.aspx  http://msdn.microsoft.com/en-us/library/6a71f45d.aspx 04.12.2013 33
  • 34. Arithmetische Operatoren Operator Funktion Beispiel + Addition 1+2 3 - Subtraktion 1–2 1 * Multiplikation 1*2 2 / Division 1/2 0 % Restdivision („Modulo“) 1%2 1 Erläuterung: • 1 / 2 = 0.5 • 0.5 ist keine ganze Zahl! Nachkommastellen werden einfach weggeschnitten • Lösungen • 1.0 / 2 ? • 1 / 2.0 ? • (double) 1 / 2 ? 04.12.2013 34
  • 35. Operatoren sind kontextabhängig • Anwendung auf String: „Konkatenation“  Beispiel: „1 + 1 = “ + 1 liefert „1 + 1 = 1“ • Anwendung auf Zahlen: „Addition“  Beispiel: 1 + 1 liefert 2 • Der + Operator hat 2 unterschiedliche Bedeutung, abhängig vom Datentyp 04.12.2013 35
  • 36. Zusammengesetzte Zuweisungsoperatoren Operator Anwendung Eigentliche Ausdruck += a += 1 a=a+1 -= a -= 1 a=a–1 *= a *= 1 a=a*1 /= a /= 1 a=a/1 %= a %= 1 a=a%1 Inkrement- und Dekrementoperator Operator Anwendung Eigentliche Ausdruck ++ a++ oder ++a a=a+1 -- a– oder --a a=a–1 04.12.2013 36
  • 37. Demo: x++ Vs. ++x 04.12.2013 37
  • 38. Boolesche Ausdrücke (engl. Boolean Expression) 04.12.2013 38
  • 39. Boolesche Ausdrücke • Ausgangspunkt: Der Datentyp bool  Beispiel: bool gK; // true oder false  Ab wann ist ein Kunde ein „gute Kunde“? • Kriterien für Beispiel:  Kunde hat keine Schulden im Schufaverzeichnis  gK = schufa == 0; Vergleichsoperator  Kunde öffnet Konto mit 5000€ Beschreibung  gK = kapital > 5000; == Gleichheit  Kunde hat festes Einkommen  gK = hatEinkommen; != Ungleichheit < Kleiner <= Kleiner gleich > Größer >= Größer gleich • Aussagen verknüpfen?  + Operator ist nicht definiert! 04.12.2013 39
  • 40. Logische UND • Syntax:  Ausdr1 && Ausdr2  Liefert true zurück, wenn Ausdr1 und Ausdr2 wahr ist. Ansonsten immer false. • Analogie in natürliche Sprache: • „Wenn Ausdr1 und Ausdr2 stimmen“ • „Wenn sowohl Ausdr1 als auch Ausdr2 stimmen“ • Beispiel:  gK = schufa == 0 && kapital > 5000; • Achtung! Wenn schufa != 0 gilt, wird sofort false zurück gegeben und der Rest ignoriert! Dieser Umstand nennt sich short-circuiting.  Lösung: Operator & statt && nehmen 04.12.2013 40
  • 41. Logische ODER • Syntax:  Ausdr1 || Ausdr2  Liefert nur false zurück, wenn Ausdr1 und Ausdr2 falsch sind. Ansonsten immer true. • Analogie in natürliche Sprache:  Nicht mit dem oder aus der natürlichen Sprache verwechseln!  „Wenn mindesten eines von beiden Aussagen gelten“ • Beispiel:  gK = schufa == 0 || kapital > 5000; • Achtung! Wenn schufa == 0 gilt, wird sofort true zurück gegeben und der Rest ignoriert! Dieser Umstand nennt sich short-circuiting.  Lösung: Operator | statt || nehmen 04.12.2013 41
  • 42. Logische NICHT / Negationsoperator • Syntax:  !Ausdr1  Liefert true zurück, wenn Ausdr1 falsch ist. Ansonsten false. • Analogie in natürliche Sprache:  „Das Gegenteil“ • Beispiel:  sK = !(schufa == 0 && kapital > 5000); • Frage: Ein Kunde ist ein schlechte Kunde, wenn er  … wenn er einen Schufa Eintrag hat oder einen Startkapital von <5000€  … wenn er einen Schufa Eintrag hat und einen Startkapital von <5000€ 04.12.2013 42
  • 44. Verzweigungen • if – Anweisung  Syntax: if (boolesche Ausdruck) { Anweisungen }  Anweisungen werden nur ausgeführt, wenn der boolesche Ausdruck wahr (true) ist.  Der boolesche Ausdruck wird Bedingung genannt.  Geschweifelten Klammern sind bei Einzelanweisung optional. • if – else – Anweisung  Syntax: if (boolesche Ausdruck) { iAnweisungen } else { eAnweisungen }  iAnweisungen werden ausgeführt, wenn die Bedingung erfüllt ist. Ansonsten werden die eAnweisungen ausgeführt.  Geschweifelten Klammern sind bei Einzelanweisung optional. 04.12.2013 44
  • 45. Verzweigungen • Der bedingte Operator  boolesche Ausdruck ? iAusdruck : eAusdruck  Sowohl iAusdruck als auch eAusdruck müssen einen Wert zurückgeben und dieser muss vom selben Typ sein.  Beispiel: • Console.WriteLine(regen == true ? „Es wird nass.“ : „nice!“); • Verschachteln  Sowohl iAnweisungen als auch eAnweisungen können selbst eine Verzweigungsanweisung sein und fortführend. • else – if – Ketten  Spezielle Form der Verschachtelung um Rechenzeit zu sparen  Der nächste if Block wird nur ausgeführt, wenn die vorherigen Bedingungen nicht erfüllt sind. 04.12.2013 45
  • 47. Beispiel für switch-case string wday = Console.ReadLine(); switch (wday) { case "Monday": Console.WriteLine("Neue Woche"); break; case "Freitag": Console.WriteLine("Wochenende!"); break; default: Console.WriteLine("Ungültige Wochentag"); break; } 04.12.2013 47
  • 48. switch - Anweisung • Syntax: switch(ausdruck) { case wert1: break; case wert2: break; // … default: break; } • Alternative für spezielle else – if – Ketten • default ist optional 04.12.2013 48
  • 49. switch - Anweisung • Jeder case muss mit einem break oder einem goto abgeschlossen werden.  Außer leere Fälle! • Für wert1, wert2, usw. müssen konstante Werte eingesetzt werden. Gültig sind nur ganzzahlige Konstanten und Strings eingesetzt werden.  Frage: Warum nicht Gleitkommazahlen?  Antwort: Ungenauigkeit • Mehr Informationen: http://msdn.microsoft.com/en-us/library/06tc147t.aspx 04.12.2013 49
  • 52. for – Schleifen • Syntax: for(Initialisierung; Iterationsbedingung; Iterationsanweisung) { Anweisungen } • Vor Schleife:  Initialisierung ausführen • Bei jedem Schleifendurchlauf wird:  Davor: Iterationsbedingung prüfen • • Bedingung erfüllt: Bedingung nicht erfüllt: Anweisungen ausführen Code nach Schleife ausführen  Danach: Iterationsanweisung ausführen • Ein Schleifendurchgang wird Iteration genannt 04.12.2013 52
  • 54. for – Schleifen • Alle Variablen, die im Initialisierung deklariert und initialisiert werden, werden Schleifenvariablen genannt und sind nur innerhalb der Schleife gültig, indem Sie definiert wurden. • Sowohl Initialisierung, Iterationsbedingung als auch Iterationsanweisung sind optional. • Wenn die Iterationsbedingung nicht spezifiziert ist, wird die Schleife endlos ausgeführt. • Die geschweiften Klammern sind optional, wenn nur höchsten eine Anweisung ausgeführt werden soll. 04.12.2013 54
  • 55. Alternative Schleifenkonstrukte • Gleichmächtig mit for – Schleife • while – Schleife  Syntax: • while(BoolescheAusdruck) { Anweisungen } • do – while – Schleife  Mindesten einer Iteration!  Syntax: • do {Anweisungen} while(BoolescheAusdruck); • Achtung: do-while braucht ein abschließendes Semikolon, aber while nicht. 04.12.2013 55
  • 57. Schleifensteuerung • break  Schleifenausführung komplett beenden  In verschachtelte Schleifen, bezieht break immer nur auf die aktuelle Schleife • continue  Bricht die Durchführung der aktuellen Iteration ab.  In verschachtelte Schleifen, bezieht continue immer nur auf die aktuelle Schleife • Einsatzgebiet:  Schleifensteuerungskonstrukte kommen insbesondere bei Endlosschleifen zum Einsatz 04.12.2013 57
  • 60. try - catch • Syntax: try { // … } catch(Exception) { // … } • catch – Block wird nur ausgeführt, wenn Fehler auftreten. Man spricht von „Exceptions geworfen“ • Mehrere catch Blöcke möglich  Ähnlich wie bei switch – case 04.12.2013 60
  • 61. Erweiterung: finally • Anweisungen innerhalb von finally werden immer ausgeführt (ob mit oder ohne Exception). • Syntax: try { // Tue irgendwas } catch { // Tue das, wenn ein Fehler auftritt } finally { // Tue das auf jedenfall! } 04.12.2013 61
  • 63. Was ist ein Array? • Problemfrage:  Große Anzahl an Variablen (Daten) verarbeiten  Beispiel: • Pixel eines Bildes: mehrere Millionen Pixel • Native Lösung: Pixel pixel1, pixel2,…,pixel1000000; • Lösung: Arrays!  Definition: „Mehrere Variablen desselben Typs, die sich denselben Bezeichner teilen, werden als Array bezeichnet.“  Synonym: Datenfelder 04.12.2013 63
  • 64. Array deklarieren • Arrays müssen wie Variablen vor Ihrer Nutzung deklariert werden. • Beispiele:  int[] zahlen;  string[] namen; • Syntax:  type[] identifier; • Vergleich zur Deklaration von Variablen  int zahl;  string 04.12.2013 name; 64
  • 65. Array initialisieren • Im Gegensatz zu Variablen müssen, Arrays vor Ihrer Nutzung initialisiert werden. • Beispiel:  zahlen  namen = new int[10]; = new string[100]; • Syntax:  identifier = new type[anzahl];  Selbige Typ von der Deklaration • Kombinierbar:  type identifier = new type[anzahl]; • Die einzelnen Variablen des Arrays werden automatisch mit 0, null oder false abhängig von ihrem Datentyp initialisiert. Die Variablen werden als Elemente bezeichnet. 04.12.2013 65
  • 66. Zugriff auf Elemente des Arrays • Beispiel:  Console.WriteLine(namen[0]); • Syntax: Lesezugriff  identifier[index]; • Syntax: Schreibzugriff  identifier[index] = wert; • Die Zählung beginnt mit 0. • Überschreitet index die Größe vom Array, wirft .net eine Exception zurück  Schutzmaßnahme gegen Angriffe 04.12.2013 66
  • 67. Demo: „e01_init.cs“ Arrays deklarieren und initialisieren Zugriff auf die Elemente vom Array 04.12.2013 67
  • 68. Wertzuweisung bei der Initialisierung • Beispiel: string[] superhelden = new string[4] { "Bruce Wayne", "Peter Parker", "Clark Kent", "Bruce Banner" }; • Syntax type[] identifier = new type[] { e1,e2,e3,… }; • Unabhängig von der Deklaration möglich type[] identifier = new type[] { e1,e2,e3,… }; • Dieses Sprachkonstrukt steht nur bei der Initialisierung des Array zur Verfügung! 04.12.2013 68
  • 69. Initialisierung vom Array und Elementen • Der Begriff Initialisierung ist bei Arrays zweideutig.  Initialisierung des Arrays  Initialisierung der Elemente vom Array. • Die Deklaration ist nur für das Array selbst notwendig. Die Deklaration der Elemente ist implizit. • Technische Details:  Was passiert bei der Deklaration des Array?  Was passiert bei der Initialisierung des Array?  Was passiert bei der Initialisierung der Elemente vom Array? • Achtung! Die Größe eines Arrays ist fest  Frage: Größe von Array verändern? 04.12.2013 69
  • 70. foreach - Schleife • Funktion:  Alle Elemente eines Arrays einmal durchlaufen  Nur Lesezugriff • Syntax type array = new type[numb]; foreach(type x in array) { expr } • Beispiel foreach (int x in zahlen) { // Wertezuweisung ist nicht möglich // x *= 2; Console.Write(x + "t"); } 04.12.2013 70
  • 71. Nützliche Funktionen Funktion Beschreibung v.Length Anzahl vom Array v Häufig auch als Länge bezeichnet Array.Sort(v) Array v sortieren Array.Sort(k,v) Array v mit k verknüpfen und v anschließend mit k als Kriterium sortieren Array.Reserve(v) Die Anordnung umkehren Array.CopyTo(s,si,d,di,n) Kopiert n Element von Array s (ab Index si) in Array d (ab Index di) • Klasse „System.Array“ • Weitere Funktionen verfügbar!  http://msdn.microsoft.com/en-us/library/system.array.aspx 04.12.2013 71
  • 72. Demo: „e02_utils.cs“ Anwendung von Standardfunktionalitäten 04.12.2013 72
  • 73. Array duplizieren • Achtung! Fehler: (siehe „e03_dupl.cs“) int[] X = new int[] { 1,2,3,4,5,6,7,8,9 }; int[] Y = X; • Semantische Fehler!  Die beiden Verweise X und Y zeigen auf dasselbe Array im Heap. • Lösung: (Pseudocode)  Leeren Array erzeugen mit selbige Länge wie Quellarray  Alle Elemente kopieren • Oder über v.Clone() und Casten 04.12.2013 73
  • 74. Demo: „e03_dupl.cs“ Anwendung von Standardfunktionalitäten 04.12.2013 74
  • 75. Mehrdimensionale Arrays • Syntax: 2D Array  type[,] = new type[r,c]; • Beispiel: 2D Array  byte [,] Bild = new byte[1920, 1080]; • Syntax: 3D Array  type[,,] = new type[x,y,z]; • Dimension unbegrenzt! • Vorsicht! Nutzung von n-dimensionale Arrays  Speicherverbrauch: 𝑑1 ∗ 𝑑2 ∗ 𝑑3 ∗ ⋯ 𝑑 𝑛  Beispiel: 1 Sekunde HD-Film • 04.12.2013 1920 ∗ 1080 ∗ 25 = 51.840.000 (ca. 51 MB) 75
  • 76. Klasse ArrayList • Abstraktion von einem Array mit variable Länge • Mischen von Typen innerhalb einer Liste erlaubt: String, int, etc. • Neues Elemente aufnehmen  alist.Add(e)  alist.Insert(pos, e) e der alist hinzufügen e der alist an der Position pos hinzufügen • Elemente aus der Liste löschen  alist.Remove(e)  alist.RemoveAt(i) 04.12.2013 Element e aus der Liste entfernen Element an der Position i entfernen 76
  • 77. Demo: „e04_alist.cs“ Erstellen einer ArrayList Hinzufügen und Entfernen von Elementen 04.12.2013 77
  • 78. Vielen Dank für die Aufmerksamkeit http://www.draphony.de facebook.com/DraphonyGames 04.12.2013 78