Erweitertes HelloWorld

Hey,
Hier ist unser erstes C# Programm.
Vorab: wer noch überhaupt keine Kenntnisse über die Programmiersprache, über das
Kompilieren oder über Objektorientierung hat, der sei auf das Visual C# 2010 openbook
von GalileoPress verwiesen. Generell empfehle ich, das Buch durchzulesen, da es von
Grund auf alles über C# erklärt. Ein gutes Nachschlagewerk.
Im Blog beschränke ich mich auf das „Training“, ich stelle Code vor und erkläre ihn.
Gesagt, getan – hier ist das erste Beispiel:

Es ist ein etwas erweitertes HelloWorld. Wir wollen unseren Anwender begrüßen und
erfahren, wie es ihm geht. Als großes Finale, antworten wir sogar noch(!).
Das Projekt ist eine Konsolenanwendung, wir wählen eine beliebige Zielversion des
.NET Frameworks, als Namen wähle ich „HelloWorld_TC“.

Der Einstiegspunkt für das Programm ist die Main-Methode, hier kommt unser Code
hinein. Zunächst definieren wir 2 Variablen, einen string „name“ und ein bool „well“.
Erst wird geprüft, ob der Anwendung Parameter übergeben wurden. Diese werden
beim Aufruf in der Kommandozeile als String übergeben, die einzelnen Parameter
werden in das String-Array args geschrieben. Wenn args die Länge 0 hat, wurde
kein Parameter übergeben. Also fordern wir den User zur Laufzeit dazu auf, den
Parameter, seinen Namen, einzugeben. Den eingegebenen String speichern wir in der
Variable name.
Ist genau ein String im Array, können wir davon ausgehen, dass der User seinen Namen
angegeben hat. Wir können also einfach den Namen in den string name eintragen.
Alle anderen Fälle, also wenn weder genau 1, noch genau 0 Strings an unser Programm
übergeben wurden, weisen wir darauf hin, wie unser Programm zu bedienen ist.

//Visit tacticalcode.blogspot.com !
static void Main(string[] args)
{
	string name = String.Empty;
	bool well = false;

	if (args.Length == 0)
	{
		Console.WriteLine('Please enter your name:');
		name = Console.ReadLine();
	}
	else if (args.Length == 1)
	{
		name = args[0];
	}
	else
		Console.WriteLine('Usage: HelloWorldTC [name]');


Nach dem ersten Abfrageblock, wollen wir auf die Eingabe des Users reagieren. Wir
wollen ihn namentlich begrüßen, und fragen, wie es ihm ergeht. Das geht nur, wenn
denn wirklich ein Name angegeben wurde. Um uns unnötige Verschachtelung zu sparen,
prüfen wir, nachdem wir vielleicht einen Namen in den String name
geschrieben haben, ob der string auch wirklich etwas enthält. Tritt die else Bedingung
der ersten Abfrage ein, haben wir nämlich keinen Namen im string gespeichert.
Haben wir einen Namen, geht es weiter:
Zum üben einen Methodenaufruf einer einfach überladenen Methode, die einen String
erwartet. Dabei tut WriteHello nichts anderes, als etwas in die Konsolenausgabe
zu schreiben.
Desweiteren machen wir 2 Dinge „auf einmal“: Eine Wertzuweisung und ein
Methodenaufruf. AreYouDoingWell ist eine Methode mit Rückgabewert vom
Typ bool. Je nachdem wie die Methode antwortet, sehen wir also, ob es dem User gut
geht, oder nicht, und können entsprechend reagieren.

	if (!String.IsNullOrEmpty(name))
	{
		WriteHello(name);
		well = AreYouDoingWell(name);
		Console.Write('\n');
		if (well)
			Console.WriteLine('Oh, great!');
		else
			Console.WriteLine('I\'m sorry for you :\'(');
	}
}
public static void WriteHello(string name)
{
	Console.WriteLine('Hi ' + name);
}

Die Methode AreYouDoingWell sehen wir uns gesondert an:
In die Konsole schreiben können wir schon. Wir fordern den User also auf, anzugeben,
wie es ihm geht. Seine/Ihre Eingabe, speichern wir in der Variable c.
Console.ReadKey() liest einen einzelnen, in die Konsole eingegebenen Buchstaben
aus. ReadKey() ist eine Methode mit Rückgabewert vom Typ ConsoleKeyInfo.
Ein ConsoleKeyInfo-Objekt hat die Eigenschaft KeyChar, welche das eingegebene
Zeichen als Char wiedergibt. Wir haben also die Eingabe des Users. Jetzt muss sie noch
ausgewertet werden. Weil es viele Fälle gibt (oder geben kann), nehmen wir keine
if-else Bedingung, sondern switch-case. Switch-Case tut nichts anderes, als den Wert,
der im switch steht, mit den Werten der einzelnen cases abzugleichen.
Wir interessieren uns für die Fälle, in denen der User „G“, „g“, „B“ und „b“ eingibt –
zur Anwenderfreundlichkeit also Groß- und Kleinbuchstaben. Da beim großen und
kleinen Buchstaben das selbe gemacht werden soll, kann man entweder für beide einen
case definieren, oder auch cases zusammenfassen.
Als default-case, also wenn keiner der anderen Fälle eintritt, geben wir erst einmal false
wieder. Wichtig ist beim switch-case, dass in jedem Fall entweder etwas wiedergegeben
und die Methode damit beendet wird (return), oder die switch Anweisung verlassen
wird (break oder, nicht sehr empfehlenswert, goto).

public static bool AreYouDoingWell(string name)
{
	Console.WriteLine('How are you?');
	Console.WriteLine('[G]ood, [B]ad: ');
	Char c = Console.ReadKey().KeyChar;
	switch (c)
	{
		case (char)66:
		{
			return false;
		}
		case (char)98:
		{
			return false;
		}
		case (char)71:
		case (char)103:
		{
			return true;
		}
		default:
			return false;
	}
}

Ich fasse die einzelnen Anwendungsschritte noch einmal zusammen:

  • Den Namen des Users (eventuell) speichern.
  • Wurde ein Name gespeichert:
  • – User Begrüßen
  • – User fragen, wie es ihm geht
  • – Je nachdem wie es ihm geht, antworten

Abschließend noch die gesamte Program.cs Datei, und hier kann das Projekt
heruntergeladen werden. Wir werden dieses Projekt später noch einmal bearbeiten,
denn noch ist die AreYouDoingWell Methode nicht richtig, macht der User eine falsche
Eingabe, wird false wiedergegeben. Das ist noch absichtlich so, wir werden daran
entweder Ereignisse oder Exceptions üben, vielleicht auch beides.

using System;
using System.Collections.Generic;
using System.Text;

namespace HelloWorld_TC
{
	class Program
	{
		//Visit tacticalcode.blogspot.com !
		static void Main(string[] args)
		{
			string name = String.Empty;
			bool well = false;

			if (args.Length == 0)
			{
				Console.WriteLine('Please enter your name:');
				name = Console.ReadLine();
			}
			else if (args.Length == 1)
			{
				name = args[0];
			}
			else
				Console.WriteLine('Usage: HelloWorldTC [name]');

			if (!String.IsNullOrEmpty(name))
			{
				WriteHello(name);
				well = AreYouDoingWell(name);
				Console.Write('\n');
				if (well)
					Console.WriteLine('Oh, great!');
				else
					Console.WriteLine('I\'m sorry for you :\'(');
			}
		}

		public static void WriteHello(string name)
		{
			Console.WriteLine('Hi ' + name);
		}

		public static bool AreYouDoingWell(string name)
		{
			Console.WriteLine('How are you?');
			Console.WriteLine('[G]ood, [B]ad: ');
			Char c = Console.ReadKey().KeyChar;

			switch (c)
			{
				case (char)66:
				{
					return false;
				}
				case (char)98:
				{
					return false;
				}
				case (char)71:
				case (char)103:
				{
					return true;
				}
				default:
					return false;
			}
		}
	}
}

MfG
NoMad

Dieser Eintrag wurde veröffentlicht in C#
Bookmarken: Permanent-Link Schreibe einen Kommentar oder hinterlasse einen Trackback: Trackback-URL.
Achtung: Wordpress interpretiert bestimmte Zeichenfolgen als Markup und verändert diese. Nutzt für Programmcode lieber Gist oder PasteBin-Services und verlinkt die Code-Schnipsel.

Post a Comment

Ihre E-Mail wird niemals veröffentlicht oder verteilt. Benötigte Felder sind mit * markiert

*
*

Du kannst diese HTML Tags und Attribute verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>