<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>iluZio</title>
	<atom:link href="http://iluzio.de/feed" rel="self" type="application/rss+xml" />
	<link>http://iluzio.de</link>
	<description>Spiele- und Anwendungs-Entwicklung</description>
	<lastBuildDate>Thu, 29 Mar 2012 12:10:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Programmieren lernen &#8211; Teil 14 (Die Methode)</title>
		<link>http://iluzio.de/archives/602</link>
		<comments>http://iluzio.de/archives/602#comments</comments>
		<pubDate>Wed, 28 Mar 2012 14:00:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmieren lernen]]></category>
		<category><![CDATA[block]]></category>
		<category><![CDATA[block-art]]></category>
		<category><![CDATA[klammern]]></category>
		<category><![CDATA[knopf]]></category>
		<category><![CDATA[main]]></category>
		<category><![CDATA[methode]]></category>
		<category><![CDATA[methoden-name]]></category>
		<category><![CDATA[roter]]></category>
		<category><![CDATA[runde]]></category>
		<category><![CDATA[schachtel]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=602</guid>
		<description><![CDATA[In Java gibt es mehrere, verschiedene Arten von Blöcken. Jede Block-Art ist für einen anderen Zweck gedacht. Wir werden in der nächsten Zeit alle wichtigen Block-Arten nacheinander kennen lernen. Die verschiedenen Block-Arten kann man sich vorstellen, wie verschiedene Arten von &#8230; <a href="http://iluzio.de/archives/602">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In Java gibt es mehrere, verschiedene Arten von Blöcken. Jede Block-Art ist für einen anderen Zweck gedacht. Wir werden in der nächsten Zeit alle wichtigen Block-Arten nacheinander kennen lernen. Die verschiedenen Block-Arten kann man sich vorstellen, wie verschiedene Arten von Schachteln. Eine Schuh-Schachtel sieht anders aus als ein Umzugskarton oder eine Schmuck-Schatulle. Aus dem Verwendungszweck heraus ergibt sich eine andere Form und Beschaffenheit der Schachtel.</p>
<p>In dem &#8220;Hallo Welt!&#8221;-Beispiel haben wir zwei Blöcke vorgefunden, tatsächlich sind dies auch schon zwei unterschiedliche Arten von Blöcken.</p>
<p><strong>Die Methode</strong></p>
<p>An dieser Stelle starten wir mit unserer ersten Block-Art, dem Methoden-Block. In unserem &#8220;Hallo Welt!&#8221;-Beispiel ist dies der innere Block:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">______ _____ _________ _
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hallo Welt!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
_</pre></td></tr></table></div>

<p>Die unterschiedlichen Block-Arten erkennt man an ihren Block-Köpfen. Sehen wir uns einmal den Kopf unseres Methoden-Blocks genauer an:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">______ _____ _________ _
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> _
         _________________________ ________
    _
_</pre></td></tr></table></div>

<p>Es gibt mehrere Hinweise darauf, woran man erkennen kann, warum dies ein Methoden-Block sein muss. Nicht alle kann ich an dieser Stelle schon einleuchtend erklären, die runden Klammern sind aber der markanteste Hinweis:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">______ _____ _________ _
    ______ ______ ____ ____<span style="color: #009900;">&#40;</span>________ ____<span style="color: #009900;">&#41;</span> _
         _________________________ ________
    _
_</pre></td></tr></table></div>

<p>Auf die genaue Bedeutung der Klammern werden wir sehr bald noch stoßen. Fürs Erste reicht uns aber die Regel, dass ein Methoden-Block immer zwingend runde Klammern im seinem Block-Kopf haben muss. Ob und was in den runden Klammern geschrieben steht, ist übrigens vorerst noch gleichgültig, die Klammer-Regel gilt mit und ohne Klammer-Inhalt.</p>
<p>Sehen wir uns im Gegenzug dazu einmal den äußeren Block-Kopf an:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HalloWelt _
    ______ ______ ____ _____________ _____ _
         _________________________ ________
    _
_</pre></td></tr></table></div>

<p>Hier sind weit und breit keine runden Klammern zu sehen, also kann dies auch kein Methoden-Block sein.</p>
<p><strong>Bedeutung einer Methode</strong></p>
<p>In allgemeinen Sprachgebrauch wird das Wort &#8220;Methode&#8221; oft verwendet wie &#8220;Strategie&#8221; oder &#8220;Taktik&#8221;. In Java ist damit eher eine Arbeitsweise bzw. ein Vorgehen gemeint. Damit soll ausgedrückt werden, dass in einer Methode die eigentliche Arbeit eines Programms verrichtet wird. Alle sinnbildlichen Konstruktionen aus Greifarmen, Schreibmaschinen, Robotern und Zahnrädern, die die Funktion eines Programms bilden, werden wir in Zukunft immer in Methoden-Blöcken aufbauen.</p>
<p><strong>Methoden-Namen</strong></p>
<p>Manchen Blöcken muss man einen Namen geben, so auch Methoden-Blöcken. Das macht man deshalb, weil es später nicht nur eine Methode (wie beim &#8220;Hallo Welt!&#8221;-Beispiel), sondern mehrere Methoden geben kann und wird. Wir erinnern uns daran, dass wir mehrere Schachteln in eine &#8220;Über&#8221;-Schachtel stecken können. Um diese voneinander unterscheiden zu können, werden sie namentlich getrennt, sozusagen beschriftet. Es darf nie zwei Methoden-Blöcke mit dem selben Namen geben.</p>
<p>Der Name einer Methode ist immer das Wort vor den runden Klammern im Kopf der Methode:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">______ _____ _________ _
    ______ ______ ____ main<span style="color: #009900;">&#40;</span>________ ____<span style="color: #009900;">&#41;</span> _
         _________________________ ________
    _
_</pre></td></tr></table></div>

<p>In diesem Fall heißt die Methode &#8220;main&#8221;.</p>
<p>Eigentlich kann der Programmierer den Namen der Methode bestimmen, er hat die freie Wahl. Lediglich sollte die Methode mit einem kleinen Buchstaben beginnen und nur aus einem Wort bestehen, d. h. keine Leerzeichen oder Zeilenumbrüche sind hier erlaubt. Es folgt ein Beispiel für eine Methode mit einem anderen Namen:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">______ _____ _________ _
    ______ ______ ____ beispielFürEineWeitereMethode<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> _
         _________________________ ________
    _
_</pre></td></tr></table></div>

<p><strong>Der rote Knopf hautnah</strong></p>
<p>Es gibt einen Grund dafür, warum die Methode im &#8220;Hallo Welt!&#8221;-Beispiel keinen willkürlich gewählten Namen trägt, sondern &#8220;main&#8221; heißt. Das letzte Code-Beispiel, in dem wir einen eigenen Namen für die Methode vergeben haben, lässt sich ohne Weiteres mit &#8220;javac&#8221; in die Java-Zwischensprache übersetzen. Das bedeutet, auch mit dem geänderten Methoden-Namen ist es ein gültiger Java-Quelltext.<br />
Gestartet werden kann dieses Programm jedoch nicht.</p>
<p>Gehen wir gedanklich wieder einmal zur grünen Weise und dem Zaun zurück. Ich habe ja erklärt, dass die Konstruktion mit Energie versehen wird, wenn der Benutzer von außen auf den roten Knopf am Zaun drückt. Was wir bisher nicht gewusst haben, ist, was in diesem Moment ganz genau passiert. Da wir jetzt aber schon die Methoden kennen, können wir diesen Vorgang wieder ein Stück genauer betrachten: Der rote Knopf am Zaun ist direkt mit der &#8220;main&#8221;-Methode des Java-Programms verbunden. Es kann zwar später mehrere Methoden mit unterschiedlichen Namen geben, möchte der Benutzer allerdings auf den roten Knopf drücken, kann damit nur eine ganz bestimmte Methode, die &#8220;main&#8221;-Methode (zu deutsch, &#8220;Hauptsache&#8221;), aktiviert werden. Wenn es keine Methode mit diesem bestimmten Namen gibt, ist der rote Knopf ohne Funktion. Eine ausgefeilte Konstruktion kann sich der Programmierer zwar trotzdem ausdenken und bauen, diese wird aber nie mit Energie versorgt werden.</p>
<p>Die &#8220;main&#8221;-Methode ist technisch gesehen eine Methode bzw. eine Schachtel wie jede andere auch. Sie nimmt in Java allerdings eine Sonderfunktion ein, weil eine Methode sofort mit dem roten Knopf verbunden wird, sobald ihr der Programmierer den Namen &#8220;main&#8221; gibt.</p>
<p><strong>Was passiert mit allen anderen Methoden?</strong></p>
<p>Aufgrund der bisherigen Erklärungen zu den Methoden könnte man denken, dass es überhaupt nur Sinn machen würde, eine &#8220;main&#8221;-Methode zu schreiben, da nur diese aktiviert werden kann. Das stimmt so nicht ganz. Von der &#8220;main&#8221;-Methode ausgehend kann man nämlich Verbindungen zu allen anderen Methoden herstellen und diese so mit Energie versorgen. Die Hauptstromleitung kommt von außen zwar nur in die Haupt-Schachtel, diese kann die Energie aber an alle anderen Schachteln weiterleiten.</p>
<p>Zum Schluss folgt hier noch ein Beispiel, wie das &#8220;Hallo Welt!&#8221;-Beispiel aussehen würde, wenn man eine weitere Methode ergänzen würde. Was wir hier also sehen, sind zwei Methoden-Schachteln, die sich zusammen in der äußeren Schachtel befinden:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HalloWelt <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hallo Welt!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> beispielFürEineWeitereMethode<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hallo neue Methode!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Und hier zur Veranschaulichung nur die Methoden-Köpfe:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">______ _____ _________ _
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> _
         _________________________ ________
    _
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> beispielFürEineWeitereMethode<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> _
         _________________________ ____ ___________
    _
_</pre></td></tr></table></div>

<p>Zur Wiederholung: Runde Klammern in einem Block-Kopf sind ein Hinweis für eine Methode:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">______ _____ _________ _
    ______ ______ ____ ____<span style="color: #009900;">&#40;</span>________ ____<span style="color: #009900;">&#41;</span> _
         _________________________ ________
    _
    ______ ______ ____ _____________________________<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> _
         _________________________ ____ ___________
    _
_</pre></td></tr></table></div>

<p><strong>Fazit</strong></p>
<p>In diesem Artikel haben wir die erste Block-Art kennen gelernt, den Methoden-Block. Man erkennt Methoden-Blöcke u. a. an den runden Klammern im Kopf, der Name einer Methode steht unmittelbar vor diesen Klammern. Es gibt eine besondere Methode, diese trägt den Namen &#8220;main&#8221;. Die &#8220;main&#8221;-Methode wird aktiviert, wenn der Benutzer am Zaun auf den roten Knopf drückt.</p>
]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/602/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programmieren lernen – Teil 13 (Kopf und Körper)</title>
		<link>http://iluzio.de/archives/583</link>
		<comments>http://iluzio.de/archives/583#comments</comments>
		<pubDate>Wed, 28 Mar 2012 13:00:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmieren lernen]]></category>
		<category><![CDATA[block]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[einrücken]]></category>
		<category><![CDATA[fuß]]></category>
		<category><![CDATA[geschweifte]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[klammern]]></category>
		<category><![CDATA[kopf]]></category>
		<category><![CDATA[körper]]></category>
		<category><![CDATA[quelltext]]></category>
		<category><![CDATA[schachteln]]></category>
		<category><![CDATA[schachtelung]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=583</guid>
		<description><![CDATA[In einem Java-Quelltext gibt es verschiedene Bereiche, und zwar immer von einer zusammengehörigen, geöffneten, geschweiften Klammer bis zu einer geschlossenen. Diese Bereiche nennt man &#8220;Blöcke&#8221;. In unserem &#8220;Hallo Welt!&#8221;-Beispiel-Code sind es zwei an der Zahl. Der eine Block befindet sich &#8230; <a href="http://iluzio.de/archives/583">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In einem Java-Quelltext gibt es verschiedene Bereiche, und zwar immer von einer zusammengehörigen, geöffneten, geschweiften Klammer bis zu einer geschlossenen. Diese Bereiche nennt man &#8220;Blöcke&#8221;.</p>
<p>In unserem &#8220;Hallo Welt!&#8221;-Beispiel-Code sind es zwei an der Zahl. Der eine Block befindet sich innerhalb des anderen Blocks:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HalloWelt <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hallo Welt!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><strong>Kopf und Körper</strong></p>
<p>Ein Code-Block besteht immer aus zwei Teilen, die man Kopf und Körper nennt. Bei einer Schachtel würde man hier von Deckel (Kopf) und der eigentlichen Schachtel (Körper) sprechen. Wo sich genau Kopf und Körper im Code befinden, ist durch die Position der geschweiften Klammern im Quelltext festgelegt und eindeutig zu erkennen. Vereinfacht kann man sagen: Der Kopf eines Blocks (der Deckel der Schachtel) ist der Text, der vor der geöffneten, geschweiften Klammer steht. Der Körper des Blocks (Schachtel selbst) ist das, was sich innerhalb der geschweiften Klammern befindet.</p>
<p>Anhand des &#8220;Hallo Welt!&#8221;-Quellcodes kriegen wir das ganz einfach raus. Hier noch einmal der Übersichtlichkeit wegen die ausgeblendete Version:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">______ _____ _________ <span style="color: #009900;">&#123;</span>
    ______ ______ ____ _____________ _____ <span style="color: #009900;">&#123;</span>
         _________________________ ________
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Also, wir haben hier zwei ineinander geschachtelte Code-Blöcke. Es folgt eine Veranschaulichung, was in diesem unseren Beispiel der Kopf und der Körper des äußeren Blocks ist. Den Kopf werde ich mit &#8220;1&#8243; markieren, den Körper mit &#8220;2&#8243;.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #cc66cc;">111111</span> <span style="color: #cc66cc;">11111</span> <span style="color: #cc66cc;">111111111</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #cc66cc;">222222</span> <span style="color: #cc66cc;">222222</span> <span style="color: #cc66cc;">2222</span> <span style="color: #cc66cc;">2222222222222</span> <span style="color: #cc66cc;">22222</span> <span style="color: #cc66cc;">2</span>
         <span style="color: #cc66cc;">2222222222222222222222222</span> <span style="color: #cc66cc;">22222222</span>
    <span style="color: #cc66cc;">2</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Sehen wir uns das einmal ganz genau an: Alles vor der äußeren, geöffneten, geschweiften Klammer ist der Kopf des Blocks. Alles, und zwar wirklich alles, innerhalb der geschweiften Klammern bildet den Körper des Blocks. Dazu gehören auch alle auftretenden inneren geschweiften Klammern, eben einfach alles.</p>
<p>Als zweite Veranschaulichung möchte ich zeigen, wo sich Kopf und Körper des inneren Blocks befinden (wieder mit &#8220;1&#8243; und &#8220;2&#8243; markiert):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">______ _____ _________ <span style="color: #009900;">&#123;</span>
    <span style="color: #cc66cc;">111111</span> <span style="color: #cc66cc;">111111</span> <span style="color: #cc66cc;">1111</span> <span style="color: #cc66cc;">1111111111111</span> <span style="color: #cc66cc;">11111</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #cc66cc;">2222222222222222222222222</span> <span style="color: #cc66cc;">22222222</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Auch das sehen wir uns einmal ganz genau an, wir beginnen diesmal mit dem Körper: Dieser schließt wieder alles ein, und zwar wirklich alles, was sich innerhalb der geschweiften Klammern befindet. Der Kopf allerdings schließt hier nicht auch noch die erste Code-Zeile komplett mit ein, obwohl sich diese ja streng betrachtet auch &#8220;vor&#8221; der inneren, geöffneten, geschweiften Klammer befindet (wir wissen: Zeilenumbrüche spielen keine Rolle). Also in etwa so:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #cc66cc;">111111</span> <span style="color: #cc66cc;">11111</span> <span style="color: #cc66cc;">111111111</span> <span style="color: #cc66cc;">1</span>
    <span style="color: #cc66cc;">111111</span> <span style="color: #cc66cc;">111111</span> <span style="color: #cc66cc;">1111</span> <span style="color: #cc66cc;">1111111111111</span> <span style="color: #cc66cc;">11111</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #cc66cc;">2222222222222222222222222</span> <span style="color: #cc66cc;">22222222</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Dies ist aber nicht der Fall. Und der Grund dafür ist auch einleuchtend: Die erste Zeile gehört ja bereits zum äußeren Block, also zur äußeren Schachtel. Und der gleiche Block-Kopf kann nicht gleichzeitig sowohl zum inneren als auch zum äußeren Block gehören, genau so wie der Deckel einer inneren Schachtel ja auch nicht gleichzeitig auf einer äußeren Schachtel sitzen kann. Das wäre unlogisch.</p>
<p><strong>Wozu die Schachteln?</strong></p>
<p>Jetzt haben wir erfahren, wie man die Blöcke im Quelltext erkennen kann. Aber wir wissen noch nicht, wozu wir sie eigentlich brauchen. Eine einfache Erklärung ist schnell gegeben: Wie Schachteln im wirklichen Leben verwenden wir die Blöcke in Java zu dem Zweck, Dinge, die zusammen gehören, auch an der gleichen Stelle aufzubewahren. Dazu ist der Körper eines Blocks da: Wenn Dinge etwas miteinander zu tun haben, werden wir sie später auch in den gleichen Block-Körper stecken. Der Block-Kopf steht sinnbildlich für den Deckel einer Schachtel. Und für diesen Zweck werden wir auch den Block-Kopf in Java verwenden: um genauer zu beschreiben, was sich in der betreffenden Schachtel eigentlich befindet und was man damit machen kann.</p>
<p><strong>Einrückung</strong></p>
<p>Nun, da klar ist, wo an einem Block der Kopf und wo der Körper ist, kann auch geklärt werden, warum in unserem fünfzeiligen &#8220;Hallo Welt!&#8221;-Beispiel die Zeilen 2, 3 und 4 nicht ganz vorne beginnen, sondern hier am Anfang ein paar Leerzeichen eingefügt wurden. Der Übersetzer &#8220;javac&#8221; ignoriert bekanntermaßen alle überflüssigen Leerzeichen und Zeilenumbrüche. Das bedeutet, wir als Programmierer können diese setzen, wo es uns gefällt. Und das tun wir auch. Wir setzen Leerzeichen und Zeilenumbrüche so, dass es der Übersichtlichkeit, der besseren Lesbarkeit des Quelltextes dient.</p>
<p>Es hat sich unter Java-Programmierern eingebürgert, dass man den gesamten Block-Kopf zusammen mit der geöffneten, geschweiften Klammer, die den Block-Körper einleitet, in eine einzige Zeile schreibt (was man ja nicht müsste). Alle folgenden Zeilen werden ein paar Leerzeichen eingerückt, und zwar so lange, bis der Quelltext an der geschlossenen, geschweiften Klammer des jeweiligen Blocks angelangt ist. Diese schließende Klammer steht wieder an der ursprünglichen Position.</p>
<p>Zeile 3 ist deshalb &#8220;doppelt&#8221; weit eingerückt, weil sich diese sowohl innerhalb des inneren, als auch innerhalb des äußeren Blocks befindet.</p>
<p><strong>Füße</strong></p>
<p>Ergänzend zum Kopf und Körper eines Blocks sei an dieser Stelle erwähnt, dass ein Block auch noch einen Fuß haben kann. Der Fuß eines Blocks wird der Bereich im Quelltext genannt, der sich nach der geschlossenen, geschweiften Klammer befindet (und, wie beim Kopf auch, nicht bereits zum äußeren Block gehört). Block-Füße brauchen wir zwar erst etwas später, das Prinzip wollte ich aber an dieser Stelle der Vollständigkeit zuliebe schon erklären.</p>
<p><strong>Fazit</strong></p>
<p>Wir haben in diesem Artikel gesehen, dass ein Block jeweils aus einem Kopf und einem Körper besteht. Optional kann ein Block auch einen Fuß haben. Im Körper eines Blocks können sich beliebig viele &#8220;Unter&#8221;-Blöcke befinden. Diese &#8220;Unter&#8221;-Blöcke werden durch Leerzeichen eingerückt, damit man sie besser als solche erkennen kann. Blöcke sind dazu gedacht, um thematisch Gleiches zusammen zu halten.</p>
]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/583/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programmieren lernen &#8211; Teil 12 (Blöcke)</title>
		<link>http://iluzio.de/archives/483</link>
		<comments>http://iluzio.de/archives/483#comments</comments>
		<pubDate>Tue, 27 Mar 2012 11:37:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmieren lernen]]></category>
		<category><![CDATA[code-blöcke]]></category>
		<category><![CDATA[geschweifte]]></category>
		<category><![CDATA[klammern]]></category>
		<category><![CDATA[leerzeichen]]></category>
		<category><![CDATA[schachteln]]></category>
		<category><![CDATA[schachtelung]]></category>
		<category><![CDATA[zeilen]]></category>
		<category><![CDATA[zeilenumbrüche]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=483</guid>
		<description><![CDATA[Als Erstes sehen wir uns die Klammersetzung im Quelltext an. Wo genau welche Klammern stehen, verrät uns sehr viel über den groben Aufbau eines Quelltextes. Blöcke Lesen wir das &#8220;Hallo Welt!&#8221;-Programm einmal wie die Seite eines Buches von oben nach &#8230; <a href="http://iluzio.de/archives/483">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Als Erstes sehen wir uns die Klammersetzung im Quelltext an. Wo genau welche Klammern stehen, verrät uns sehr viel über den groben Aufbau eines Quelltextes.</p>
<p><strong>Blöcke</strong></p>
<p>Lesen wir das &#8220;Hallo Welt!&#8221;-Programm einmal wie die Seite eines Buches von oben nach unten und von links nach rechts. Zuerst kommen hier die Wörter &#8220;public&#8221;, &#8220;class&#8221; und &#8220;HalloWelt&#8221;. Diese wollen wir vorerst überlesen. Dann taucht im Quelltext die erste geöffnete, geschweifte Klammer &#8220;{&#8221; auf, und zwar am Ende von Zeile 1.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HalloWelt <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hallo Welt!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Außer dieser geschweiften Klammer am Ende von Zeile 1 gibt es noch mehr geschweifte Klammern im Quelltext. Betrachten wir zunächst also alle geschweiften Klammern. Die Nächste finden wir am Ende von Zeile 2. Die dritte Zeile ist in dieser Hinsicht uninteressant, da gibt es nur runde und eckige Klammern. Dafür finden wir in Zeile 4 und Zeile 5 jeweils eine geschlossene, geschweifte Klammer vor &#8220;}&#8221;.</p>
<p>Zum besseren Verständnis blenden wir hier einmal alles andere aus:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">______ _____ _________ <span style="color: #009900;">&#123;</span>
    ______ ______ ____ _____________ _____ <span style="color: #009900;">&#123;</span>
         _________________________ ________
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Folgendes fällt auf: Es sind genau so viel offene wie geschlossene, geschweifte Klammern vorhanden, nämlich jeweils 2. Die geschweiften Klammern sind ineinander geschachtelt. Wenn wir kurz den restlichen Text, und auch noch die Zeilennummern vergessen, dann sieht es folgendermaßen aus:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#123;</span>  <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span></pre></div></div>

<p>Schachtelung bedeutet hier, dass die beiden inneren Klammern (Klammer 2 und Klammer 3) und die beiden äußeren Klammern (Klammer 1 und Klammer 4) zusammen gehören. Man könnte sagen, die inneren Klammern stellen eine kleine Schachtel dar, die sich in einer größeren Schachtel, nämlich den äußeren Klammern, befindet. Anders als in unserem &#8220;Hallo Welt!&#8221;-Beispiel können sich auch noch mehr als eine Schachtel in einer größeren Schachtel befinden, und die Schachtelung ist theoretisch auch beliebig &#8220;tief&#8221; möglich. Es ist also folgendes durchaus denkbar:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#123;</span>  <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#123;</span>  <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#123;</span>  <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span></pre></div></div>

<p>Solche Fälle kommen in der Praxis auch tatsächlich vor, jetzt am Anfang aber noch nicht.</p>
<p>Den Bereich von einer zusammengehörigen, geöffneten, geschweiften Klammer bis zu einer geschlossenen, geschweiften Klammer nennt man &#8220;Block&#8221;, oder auch &#8220;Code-Block&#8221;. Wie wir gesehen haben gibt es &#8220;Blöcke innerhalb von Blöcken&#8221;, so wie es &#8220;Schachteln innerhalb von Schachteln&#8221; gibt. Im Folgenden erfahren wir noch mehr über Blöcke im Quelltext.</p>
<p><strong>Ist die Wiese noch grün?</strong></p>
<p>Der Vergleich mit der grünen Wiese ist an dieser Stelle nach wie vor noch denkbar, wenn man sich vorstellen möchte, dass wir die Schachteln (Blöcke) eben auf dieser Wiese platzieren. Es ist dann eben ein wenig Fantasie gefragt, wenn wir die fünfte Schachtel innerhalb einer Schachtel innerhalb einer Schachtel einfügen, und darin dann auch noch ausgefeilte Konstruktionen Platz finden müssen.<br />
Mit der grünen Wiese und dem Zaun wollte ich vor Allem die Beziehung zwischen Programmierer, Programm und Benutzer verdeutlichen. Jetzt tauchen wir langsam tiefer in die Java-Programmierung und den Code ein und ich werde nicht mehr jedes Detail anhand der grünen Wiese erklären. Trotzdem wird der Vergleich hin und wieder auftauchen und darf selbstverständlich immer als Gedankenstütze hergekommen werden.</p>
<p><strong>Der Quellcode, die Blöcke und die Zeilen</strong></p>
<p>Um zu verstehen, warum es Blöcke im Quelltext gibt, muss man wissen, dass es bei Java nicht drauf ankommt, in welcher Zeile welcher Befehl geschrieben steht und an welcher Stelle innerhalb einer Zeile. In der Tat ist das völlig egal. Aber es ist ganz und gar nicht egal, in welcher Reihenfolge die Befehle stehen.</p>
<p>Um das zu verdeutlichen, folgt ein Beispiel für das &#8220;Hallo Welt!&#8221;-Programm, das exakt gleich wie die schon mehrmals gezeigte Variante funktioniert:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="java" style="font-family:monospace;">                    <span style="color: #000000; font-weight: bold;">public</span>
<span style="color: #000000; font-weight: bold;">class</span>
       HalloWelt   <span style="color: #009900;">&#123;</span>    <span style="color: #000000; font-weight: bold;">public</span>
                <span style="color: #000000; font-weight: bold;">static</span>
<span style="color: #000066; font-weight: bold;">void</span>
      main<span style="color: #009900;">&#40;</span>
                          <span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span>
args<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hallo Welt!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
              <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Auch folgender Quelltext hat genau die selbe Bedeutung:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HalloWelt <span style="color: #009900;">&#123;</span> <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hallo Welt!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Wie wir sehen, kann der Quelltext des &#8220;Hallo Welt!&#8221;-Programms in fünf Zeilen, aber auch in 11 oder auch nur in einer Zeile stehen. Wir können alle drei gezeigten Versionen mit &#8220;javac&#8221; übersetzen und wir werden jedes mal das gleiche Ergebnis erhalten, nämlich ein Programm, das &#8220;Hallo Welt!&#8221; in die Kommandozeile schreibt.</p>
<p>Woran liegt es, dass die drei Quelltexte, die auf den ersten Blick so unterschiedlich aussehen, das gleiche Ergebnis liefern? Dem genauen Beobachter ist vielleicht aufgefallen, dass sich die Reihenfolge der Wörter und Zeichen über die drei Varianten hinweg nicht verändert hat. Lediglich die Zeilenumbrüche wurden verändert, und auch wurden Leerzeichen vor und zwischen den einzelnen Wörtern eingefügt oder gelöscht. Da diese Tatsache für das übersetzte und gestartete Programm aber offensichtlich keine Rolle spielt, muss das bedeuten, dass sich der Übersetzer &#8220;javac&#8221; überhaupt nicht für Zeilenumbrüche interessiert. Auch die Position der Befehle in einer Zeile, die wir als Programmierer z. B. mit Leerzeichen bestimmen können, werden von &#8220;javac&#8221; komplett ignoriert.</p>
<p>Lediglich ganz bestimmte Leerzeichen dürfen nicht entfernt werden, und zwar dann, wenn dadurch andere Wörter entstehen würden. Als Beispiel nehmen wir dafür die erste Zeile aus unserem ursprünglichen &#8220;Hallo Welt!&#8221;-Quelltext:</p>
<p>Das Orginal:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HalloWelt <span style="color: #009900;">&#123;</span></pre></div></div>

<p>Folgendes darf man machen:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span>           <span style="color: #000000; font-weight: bold;">class</span> HalloWelt <span style="color: #009900;">&#123;</span></pre></div></div>

<p>Aber das ist nicht zulässig:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">publicclass HalloWelt <span style="color: #009900;">&#123;</span></pre></div></div>

<p>Wir haben die Java-Wörter &#8220;public&#8221; und &#8220;class&#8221; zwar noch nicht behandelt, aber ich kann an dieser Stelle schon einmal vorweg nehmen, dass diese beiden Wörter in der Tat zur Java-Sprache gehören. Ein Wort wie &#8220;publicclass&#8221; allerdings nicht.</p>
<p>Zusammengefasst kann man sagen, dass der Programmierer (mit der soeben genannten Einschränkung) im Quelltext Zeilenumbrüche und Leerzeichen einfügen und löschen kann, wie es ihm beliebt. Sehen wir uns dazu noch einmal die Zeile 3 aus unserem ursprünglichen &#8220;Hallo Welt!&#8221;-Quelltext an:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hallo Welt!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Dieser Ausschnitt aus dem Quelltext taucht sowohl in unserer 5-zeiligen, als auch in der 11-zeiligen und der einzeiligen Quelltext-Variante auf. Und dieses Stück Quelltext befindet sich in jeder Variante immer innerhalb des inneren, geschweiften Klammer-Blocks, sozusagen innerhalb der innersten der beiden Schachteln, auch wenn diese jedes mal in unterschiedlichen Zeilen stehen. Und nur darauf kommt es an: Java-Code wird durch Klammersetzung strukturiert, nicht durch Zeilenumbrüche oder Leerzeichen.</p>
<p><strong>Fazit</strong></p>
<p>Wir haben in diesem Artikel die grobe Struktur von Java-Quellcode betrachtet. Java-Code ist in Blöcken strukturiert, die mit geschweiften Klammern erstellt werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/483/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mini Bluetooth Keyboard unter Android zum Laufen kriegen</title>
		<link>http://iluzio.de/archives/561</link>
		<comments>http://iluzio.de/archives/561#comments</comments>
		<pubDate>Thu, 22 Mar 2012 16:17:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[bluetooth]]></category>
		<category><![CDATA[cyanogen]]></category>
		<category><![CDATA[hid]]></category>
		<category><![CDATA[keyboard]]></category>
		<category><![CDATA[lg]]></category>
		<category><![CDATA[mini]]></category>
		<category><![CDATA[optimus 3d]]></category>
		<category><![CDATA[p920]]></category>
		<category><![CDATA[root]]></category>
		<category><![CDATA[superoneclick]]></category>
		<category><![CDATA[treiber]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=561</guid>
		<description><![CDATA[Ich hatte vor Kurzem massiv Probleme damit, ein ersteigertes &#8220;Mini Bluetooth Keyboard&#8221; unter meinem LG Optimus 3D P920 mit Android 2.3.5 zum Laufen zu kriegen. Ich habe genau das gleiche Keyboard, wie man es beispielsweise hier oder hier kaufen kann. &#8230; <a href="http://iluzio.de/archives/561">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ich hatte vor Kurzem massiv Probleme damit, ein ersteigertes &#8220;Mini Bluetooth Keyboard&#8221; unter meinem LG Optimus 3D P920 mit Android 2.3.5 zum Laufen zu kriegen. Ich habe genau das gleiche Keyboard, wie man es beispielsweise <a href="http://www.pearl.de/a-PX2563-1002.shtml">hier</a> oder <a href="http://www.amazon.de/gp/product/B006NRZIA6/ref=pd_lpo_k2_dp_sr_2?pf_rd_p=471061493&#038;pf_rd_s=lpo-top-stripe&#038;pf_rd_t=201&#038;pf_rd_i=B004HKQ8V4&#038;pf_rd_m=A3JWKAKR8XB7XF&#038;pf_rd_r=0SHNM57ANMZN5VREJDPW">hier</a> kaufen kann.</p>
<p>In vielen Produkt-Bescheibungen kann man lesen, dass das Gerät unter Android funktionieren soll, Benutzerbewertungen erzählen da teilweise wieder etwas anderes. So ging das Gerät bei mir anfangs auch nicht, zumal die mitgelieferte PDF-Bedienungsanleitung lückenhaft ist. Im Android Market gibt z. T. kostenpflichtige Software, die noch Abhilfe schaffen soll, bei mir hat keine dieser Apps funktioniert. Dieser Artikel beschreibt, wie ich es dann doch noch geschafft habe.</p>
<p><span style="color: red; font-weight: bold">ACHTUNG! In diesem Artikel beschreibe ich, wie es BEI MIR funktioniert hat. Ich weise hier ausdrücklich darauf hin, dass ich keinerlei Verantwortung übernehme, falls etwas bei Eurem Telefon nicht funktionieren sollte!</span></p>
<p><strong>1. Bluetooth Scan und Pairing</strong></p>
<p>Am Rand der Bluetooth-Tastatur gibt es einen Ein-/Aus-Schalter. Schaltet das Gerät dort ein (natürlich erst nach vorherigem Aufladen am mitgelieferten USB-Kabel). Eine blaue LED leuchtet dann für ca. 2 Sekunden auf und geht dann wieder aus, das ist normal.</p>
<p>Evtl. kann das Android-Telefon die Tastatur jetzt schon sehen. Geht dazu nach</p>
<pre>Einstellungen -> Drahtlos &#038; Netzwerke -> Bluetooth Einstellungen</pre>
<p>und klickt auf &#8220;Scan nach Geräten&#8221;. Falls die Tastatur jetzt noch nicht auftauchen sollte, muss auf der Tastatur auf den &#8220;Pairing&#8221;-Knopf gedrückt werden. Diesen habe ich zunächst übersehen, da er etwas unscheinbar angebracht ist. Und zwar befindet sich dieser Knopf auf der Tastatur-Vorderseite rechts neben den LEDs und ist nur mit dem Fingernagel gut zu drücken. Nach Betätigung des Knopfes müsste eine LED zu Blinken beginnen, die Tastatur ist nun im Pairing-Modus und müsste spätestens jetzt nach einem weiteren &#8220;Scan nach Geräten&#8221; am Android-Telefon in der Liste auftauchen.</p>
<p>Es folgt nun das erste kleine Hindernis, das in der Bedienungsanleitung der Tastatur mit keinem Sterbenswörtchen gewürdigt wurde. Klickt man nun am Smartphone auf &#8220;Pairing mit diesem Gerät&#8221;, erscheint ein Dialog, wo man einen Pairing-Code eingeben muss. Dieser Code ist völlig beliebig, ich wähle immer</p>
<pre>1111</pre>
<p>und zwar aus folgendem Grund: Exakt der gleiche Code muss nun auf der Bluetooth-Tastatur im Pairing-Modus eingegeben werden, gefolgt von einem Tastendruck auf ENTER. Die Einsen lassen sich auf der Tastatur leicht drücken, da sich die &#8220;1&#8243; links oben in der Ecke befindet. Ist dieser Vorgang abgeschlossen, erscheint in der Liste der Bluetooth-Geräte auf dem Smartphone nicht mehr &#8220;Pairing mit diesem Gerät&#8221;, sondern ein anderer Text, bei mir &#8220;Gepaart, aber nicht verbunden&#8221;. Erscheint bei Euch ein anderer Text (&#8220;Verbindung hergestellt&#8221; o. ä.), dann habt Ihr Glück und müsst nicht weiterlesen. Leider war das bei mir nicht der Fall.</p>
<p><strong>2. root</strong></p>
<p>Nachdem ich alle Bluetooth-Tastatur-Apps aus dem Market ausprobiert hatte, für die man kein root braucht, war ich soweit, dass ich mein Phone doch &#8220;rooten&#8221; wollte. &#8220;Root&#8221; bedeutet, dass man sein Telefon (bzw. bestimmte Apps) in einen Betriebs-Modus versetzt, in dem sie die volle Kontrolle über das gesamte Betriebs-System des Smartphones haben, was normalerweise nicht der Fall ist. Hinter den vielfältigen Möglichkeiten, die Apps damit nun haben können, verbergen sich natürlich auch die Risiken, das System irreversibel zu Beschädigen. Abgesehen davon ist der Vorgang des &#8220;rootens&#8221; ein Risiko an sich, falls im &#8220;worst case&#8221; das Telefon danach nicht mehr funktioniert, mal ganz abgesehen vom Aufgeben der Garantieansprüche des Smartphones.</p>
<p>Um es kurz zu machen: Ich habe mein Telefon nach <a href="http://www.android-hilfe.de/anleitungen-fuer-das-lg-p920-optimus-3d/120682-how-root-fuers-lg-p920-3d.html">dieser Anleitung</a> erfolgreich gerootet, allerdings mit einer neueren Version der root-Software &#8220;SuperOneClick&#8221; und zwar &#8220;v2.3.3&#8243;. Beim ersten root-Version tat sich nichts, evtl. gab es ein Problem mit der USB-Verbindung zum PC, es war hinterher aber auch nichts kaputt. Der zweite Durchlauf verlief dann problemlos und ich hatte &#8220;root&#8221; auf meinem Telefon.</p>
<p>Problem: Auch die Bluetooth-Apps, die nur mit &#8220;root&#8221; funktionierten, brachten meine Tastatur nicht zum Laufen.</p>
<p><strong>3. custom rom</strong></p>
<p>Nach einigem Weiter-Recherchieren kam heraus, dass die Bluetooth-Tastatur ein HID-Gerät ist. Damit ist das Verbindungs-Protokoll zwischen Tastatur und Telefon gemeint. In meiner doch recht aktuellen Android-Version von 2.3.5, sollten die zuständigen HID-Treiber eigentlich vorhanden sein, also hätte es funktionieren müssen. Da die Firmware auf meinem Telefon aber nicht das Original von Google, sondern eine eigene Anpassung von LG ist, gehe ich inzwischen davon aus, dass die HID-Treiber von LG entfernt wurden, ob versehentlich oder absichtlich spielt jetzt auch schon keine Rolle mehr.</p>
<p>Lösung: Ein so genanntes &#8220;custom rom&#8221;. D. h. man ersetzt das aktuelle Betriebs-System auf dem Telefon durch eine andere Version. Ich habe mich an dieser Stelle für &#8220;Cyanogen&#8221; entschieden. Die Version 7 dieses alternativen Android-Betriebssystems ist leider noch nicht fertig gestellt und ausgereift. Funktionieren tut sie trotzdem. In <a href="http://www.handy-faq.de/forum/lg_optimus_3d_forum/233472-lg_optimus_3d_p920_cyanogenmod_cm7.html">diesem Thread</a> steht alles, was man dazu braucht (Achtung: die neuesten Downloads stehen immer ganz am Ende des Threads und nicht auf der ersten Seite, wo auch die Installations-Anleitung zu finden ist).</p>
<p>Nach der Installation von &#8220;Cyanogen&#8221; wiederholte ich einfach Punkt 1 dieses Artikels und meine Bluetooth-Tastatur funktionierte sofort einwandfrei und ohne die Installation weiterer Apps.</p>
<p><strong>4. Fazit</strong></p>
<p>Es ist wahrscheinlich etwas Glücksache, ob HID-Treiber auf dem Andriod-Telefon vorhanden sind, das man gerade in der Hand hält, denn davon hängt wohl das Funktionieren der Tastatur ab. Ich bin inzwischen sehr zufrieden mit &#8220;Cyanogen&#8221;, das im Übrigen viel schneller läuft als meine vorherige Android-Variante. Lediglich der Akku-Verbrauch hat sich zum Negativen verändert. Aber ich bin zuversichtlich, dass sich dies noch verbessern wird. Schließlich ist die Version, die ich gerade auf dem Telefon habe, noch nicht mal eine Beta-Version.</p>
]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/561/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Programmieren lernen – Teil 11 (Der Code)</title>
		<link>http://iluzio.de/archives/464</link>
		<comments>http://iluzio.de/archives/464#comments</comments>
		<pubDate>Thu, 15 Mar 2012 18:18:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmieren lernen]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[englisch]]></category>
		<category><![CDATA[quellcode]]></category>
		<category><![CDATA[quelltext]]></category>
		<category><![CDATA[source code]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=464</guid>
		<description><![CDATA[Während wir uns in den letzten Artikeln mit grundsätzlichen Fragen beschäftigt haben (Was ist Programmieren? Was ist eine Programmiersprache? Was sind Befehle? Wie werden die Befehle übersetzt?), wollen wir uns nun stärker der Programmiersprache Java und ihren Befehlen selbst widmen, &#8230; <a href="http://iluzio.de/archives/464">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Während wir uns in den letzten Artikeln mit grundsätzlichen Fragen beschäftigt haben (Was ist Programmieren? Was ist eine Programmiersprache? Was sind Befehle? Wie werden die Befehle übersetzt?), wollen wir uns nun stärker der Programmiersprache Java und ihren Befehlen selbst widmen, die wir schon kurz beim &#8220;Hallo Welt!&#8221;-Programm gesehen haben. Wir wollen auf die genaue Bedeutung der einzelnen Zeilen und Zeichen eingehen.</p>
<p><strong>Der Code</strong></p>
<p>Den Text bestehend aus Java-Befehlen, den man in eine .java-Datei schreibt, und der später übersetzt wird, wie wir das schon selbst gemacht haben, nennt man &#8220;Quelltext&#8221;. Quell deshalb, weil dieser Text die Quelle des späteren Programms ist. Ohne Java-Befehle würde es kein Programm geben, das ein Benutzer verwenden könnte. Synonyme für &#8220;Quelltext&#8221; sind &#8220;Quellcode&#8221; (englisch &#8220;source code&#8221;) oder oft auch einfach nur mit &#8220;Code&#8221; abgekürzt. Deshalb wird programmieren manchmal auch als kodieren (englisch &#8220;coding&#8221;) bezeichnet.</p>
<p><strong>Ist Java englisch?</strong></p>
<p>Sehen wir uns, bevor wir richtig einsteigen, noch einmal kurz den Code zum &#8220;Hallo Welt!&#8221;-Programm an:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HalloWelt <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hallo Welt!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Dieser Code besteht aus 5 Zeilen. Man erkennt durchaus einzelne Wörter, z. B. &#8220;public&#8221;, &#8220;class&#8221;, &#8220;static&#8221;, woraus man schließen könnte, dass Java irgendwie mit englisch verwandt ist. Aber auch unser &#8220;Hallo Welt!&#8221; sehen wir hier in Zeile 3. Ein Mix aus deutsch und englisch also? Nicht ganz. Offensichtlich liest sich Java überhaupt nicht wie eine Sprache für Menschen (deutsch oder englisch). Die geschweiften, runden und eckigen Klammern und Satzzeichen (&#8220;.&#8221;, &#8220;;&#8221;), die man beim genaueren Hinsehen erkennt, und die fehlende deutsche oder englische Grammatik lassen den Text sehr technisch aussehen. Trotzdem stimmt es, dass Java einige englische Wörter enthält. Auf Englisch hat man sich schon sehr früh in der Geschichte der Programmiersprachen geeinigt, und heutzutage ist Englisch aus der Computer-Welt überhaupt nicht mehr wegzudenken. Nahezu alle Programmiersprachen haben sich aus dem englischen Wortschatz bedient. Die Grammatik allerdings, also der Aufbau der einzelnen Wörter, der das formt, was man hier oben als &#8220;Hallo-Welt!&#8221;-Code lesen kann, ist nicht aus dem Englischen und auch sonst aus keiner Menschen-Sprache übernommen, sondern folgt ganz eigenen Regeln.</p>
<p>Wie das deutsche &#8220;Hallo Welt!&#8221; in dieses Gefüge passt, darauf werden wir später noch zurück kommen. Es sei hier aber auf jeden Fall erwähnt, dass dieses kurze Stück &#8220;deutsch&#8221; keinen logischen Bruch zum soeben Erklärten darstellt, das hat eine einfache und einleuchtende Erklärung.</p>
<p><strong>In Farbe, und bunt!</strong></p>
<p>Der Quelltext wird hier in verschiedenen Farben und Schrift-Formatierungen (manchmal fett, manchmal normal) dargestellt. In vielen (wenn auch nicht in allen) hier für den Beginn vorgeschlagenen Editoren, wird der Quelltext allerdings einfarbig und unformatiert angezeigt. Die Farben dienen lediglich der besseren Lesbarkeit und haben keinerlei Einfluss bzw. Bedeutung für den Quelltext. Diese Einfärbung und Formatierung, die meistens automatisch, also ohne Zutun des Programmierers geschieht, werden wir auch noch später behandeln. Zum jetzigen Zeitpunkt soll uns das aber nicht weiter stören und wir tun so, als wäre der Quelltext einfarbung und unformatiert.</p>
<p><strong>Fazit</strong></p>
<p>Wir haben gelernt, dass man den Java-Text, mit dem wir uns im Folgenden hauptsächlich beschäftigen werden, auch &#8220;Quelltext&#8221;, &#8220;Quellcode&#8221; oder &#8220;Code&#8221; genannt wird, und dass dieser &#8220;Code&#8221; hauptsächlich aus englischen Wörtern und sonstigen Zeichen wie verschiedene Arten von Klammern und Satzzeichen besteht. Textliche Formatierungen und Einfärbungen, wenn Quelltext beispielsweise in einem Editor oder auf einer Internet-Seite zu lesen ist, spielt für die Funktion des Quelltextes überhaupt keine Rolle.</p>
]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/464/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JRE-Version in einem Inno-Setup überprüfen</title>
		<link>http://iluzio.de/archives/440</link>
		<comments>http://iluzio.de/archives/440#comments</comments>
		<pubDate>Fri, 03 Feb 2012 00:57:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[check]]></category>
		<category><![CDATA[eingebaut]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[environment]]></category>
		<category><![CDATA[inno]]></category>
		<category><![CDATA[installer]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JRE]]></category>
		<category><![CDATA[minimum]]></category>
		<category><![CDATA[mitgeliefert]]></category>
		<category><![CDATA[mitliefern]]></category>
		<category><![CDATA[runtime]]></category>
		<category><![CDATA[setup]]></category>
		<category><![CDATA[überprüfen]]></category>
		<category><![CDATA[überprüfung]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=440</guid>
		<description><![CDATA[In diesem Artikel geht es darum, wie man in einem Inno-Setup Skript einen JRE-Check machen kann. Es soll überprüft werden, ob und welche welche JRE (Java Runtime Environment) auf dem PC vorhanden ist, und wie man ggf. eine im Setup &#8230; <a href="http://iluzio.de/archives/440">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In diesem Artikel geht es darum, wie man in einem Inno-Setup Skript einen JRE-Check machen kann. Es soll überprüft werden, ob und welche welche JRE (Java Runtime Environment) auf dem PC vorhanden ist, und wie man ggf. eine im Setup mitgelieferte JRE installieren kann, falls es auf dem PC entweder gar keine JRE gibt, oder diese veraltet ist.</p>
<p><strong>1 Voraussetzungen</strong></p>
<p>Dieser Artikel setzt Kenntnisse für Inno-Setup (http://www.jrsoftware.org/isinfo.php)  voraus. Ich benutze für die Bearbeitung der Inno-Setup Skripte die grafische Oberfläche InnoIDE (http://www.innoide.org/), die ich auch sehr empfehlen kann. Damit ist das Durcharbeiten dieses Artikels auf jeden Fall einfacher.</p>
<p><strong>2 Custom Messages</strong></p>
<p>Als erstes müssen wir in das Skript drei so genannte &#8220;Custom Messages&#8221; einfügen. Das sind Textbausteine, die allein noch nichts tun. Wir müssen sie aber anlegen, damit wir sie später verwenden können, um den Benutzer zu informieren oder zu befragen:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>CustomMessages<span style="">&#93;</span></span>
german.jre_not_found<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">Für <span style="">&#123;</span>#MyAppName<span style="">&#125;</span> wird Java benötigt. %nAuf diesem Computer wurde kein Java gefunden. %n%nWollen Sie es jetzt installieren?</span>
german.jre_too_old<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">Für <span style="">&#123;</span>#MyAppName<span style="">&#125;</span> wird eine aktuelle Version von Java benötigt. %nDas auf diesem Computer installierte Java ist jedoch veraltet. %n%nWollen Sie es jetzt eine aktuelle Version von Java installieren?</span>
german.installing_jre<span style="color: #000066; font-weight:bold;">=</span><span style="color: #660066;">Java wird installiert... Bitte warten....</span></pre></div></div>

<p><strong>3 Files</strong></p>
<p>Dann muss im Abschnitt &#8220;Files&#8221; das JRE-Installationsprogramm mitgeliefert werden, dass im Falle einer veralteten oder gar nicht vorhandenen JRE auf dem PC ausgeführt wird:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>Files<span style="">&#93;</span></span>
Source: jre-6u22-windows-i586-s.exe<span style="color: #666666; font-style: italic;">; DestDir: &quot;{app}&quot;; Flags: ignoreversion</span></pre></div></div>

<p><strong>4 Run</strong></p>
<p>Im Abschnitt &#8220;Run&#8221; wird eingetragen, dass das zuvor hinzugefügte JRE-Installationsprogramm nach dem eigentlichen Setup ausgeführt werden soll. Dies ist allerdings mit der Bedingung &#8220;CheckJRE&#8221; verknüpft, wie man es ganz am Ende der Zeile sehen kann. Das bedeutet, dass diese Anweisung nicht immer ausgeführt wird, sondern nur wenn die Bedingung mit dem Namen &#8220;CheckJRE&#8221; erfüllt ist. Im Klartext wird hier eine Funktion weiter unten mit genau diesem Namen aufgerufen. Der Boolean(Ja/Nein)-Rückgabewert entscheidet, ob das JRE-Installationsprogramm gestartet wird, oder nicht.</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>Run<span style="">&#93;</span></span>
Filename: <span style="">&#123;</span>app<span style="">&#125;</span>\jre-6u22-windows-i586-s.exe<span style="color: #666666; font-style: italic;">; StatusMsg: &quot;{cm:installing_jre}&quot;; Check: CheckJRE;</span></pre></div></div>

<p><strong>5 Code</strong></p>
<p>Hier kommen wir zur eigentlichen JRE-Prüfung, einer Funktion mit dem Namen &#8220;CheckJRE&#8221;, wie sie aus dem &#8220;Run&#8221;-Abschnitt aufgerufen wird.<br />
Hier werden auch die Textbausteine von weiter oben verwendet.<br />
In der Funktion gibt es eine Zeile &#8220;NecessaryJREVersion := &#8217;1.6&#8242;;&#8221;, dort kann man die gewünschte bzw. minimale JRE-Version eintragen, die vorausgesetzt werden soll. Dies muss nicht zwingend mit der mitgelieferten JRE-Version übereinstimmen. Es kann durchaus auch eine JRE-Version 1.6 mitgeliefert werden (wie weiter oben beschrieben), es wird im Inno-Setup vielleicht aber nur JRE 1.5 vorausgesetzt.</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;"><span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>code<span style="">&#93;</span></span>
Function CheckJRE<span style="">&#40;</span><span style="">&#41;</span>: Boolean<span style="color: #666666; font-style: italic;">;</span>
var
  CurrentJREVersion: String<span style="color: #666666; font-style: italic;">;</span>
  NecessaryJREVersion: String<span style="color: #666666; font-style: italic;">;</span>
  JRENotFound: Boolean<span style="color: #666666; font-style: italic;">;</span>
  JRETooOld: Boolean<span style="color: #666666; font-style: italic;">;</span>
  InstallJRE: Boolean<span style="color: #666666; font-style: italic;">;</span>
&nbsp;
begin
&nbsp;
  NecessaryJREVersion :<span style="color: #000066; font-weight:bold;">=</span> '<span style="">1.6</span>'<span style="color: #666666; font-style: italic;">;</span>
  JRENotFound :<span style="color: #000066; font-weight:bold;">=</span> False<span style="color: #666666; font-style: italic;">;</span>
  JRETooOld :<span style="color: #000066; font-weight:bold;">=</span> False<span style="color: #666666; font-style: italic;">;</span>
&nbsp;
  // check for JRE in registry  
  if <span style="">&#40;</span>RegQueryStringValue<span style="">&#40;</span>HKEY_LOCAL_MACHINE, 'SOFTWARE\JavaSoft\Java Runtime Environment', 'CurrentVersion', CurrentJREVersion<span style="">&#41;</span><span style="">&#41;</span> then
  begin
    JRETooOld :<span style="color: #000066; font-weight:bold;">=</span> <span style="">&#40;</span>CurrentJREVersion &lt; NecessaryJREVersion<span style="">&#41;</span><span style="color: #666666; font-style: italic;">;</span>
  end else begin
    JRENotFound :<span style="color: #000066; font-weight:bold;">=</span> True<span style="color: #666666; font-style: italic;">;</span>
  end<span style="color: #666666; font-style: italic;">;</span>
&nbsp;
  // ask user
  InstallJRE :<span style="color: #000066; font-weight:bold;">=</span> False<span style="color: #666666; font-style: italic;">;</span>
&nbsp;
  if <span style="">&#40;</span>JRENotFound<span style="">&#41;</span> then
  begin
&nbsp;
    if <span style="">&#40;</span>MsgBox<span style="">&#40;</span>ExpandConstant<span style="">&#40;</span>'<span style="">&#123;</span>cm:jre_not_found<span style="">&#125;</span>'<span style="">&#41;</span>, mbinformation, mb_YesNo<span style="">&#41;</span> <span style="color: #000066; font-weight:bold;">=</span> idYes<span style="">&#41;</span> then
    begin
      InstallJRE :<span style="color: #000066; font-weight:bold;">=</span> True<span style="color: #666666; font-style: italic;">;</span>
    end<span style="color: #666666; font-style: italic;">;</span>
  end<span style="color: #666666; font-style: italic;">;</span>
&nbsp;
  if <span style="">&#40;</span>JRETooOld<span style="">&#41;</span> then
  begin
    if <span style="">&#40;</span>MsgBox<span style="">&#40;</span>ExpandConstant<span style="">&#40;</span>'<span style="">&#123;</span>cm:jre_too_old<span style="">&#125;</span>'<span style="">&#41;</span>, mbinformation, mb_YesNo<span style="">&#41;</span> <span style="color: #000066; font-weight:bold;">=</span> idYes<span style="">&#41;</span> then
    begin
      InstallJRE :<span style="color: #000066; font-weight:bold;">=</span> True<span style="color: #666666; font-style: italic;">;</span>
    end<span style="color: #666666; font-style: italic;">;</span>
  end<span style="color: #666666; font-style: italic;">;</span>
&nbsp;
  Result :<span style="color: #000066; font-weight:bold;">=</span> InstallJRE<span style="color: #666666; font-style: italic;">;</span>
&nbsp;
end<span style="color: #666666; font-style: italic;">;</span></pre></div></div>

<p><strong>6 Ende</strong></p>
<p>Ich hoffe, dass ich mit diesem Artikel weiter helfen konnte und freue mich über Feedback in Form von Kommentaren und Verbesserungsvorschlägen.</p>
]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/440/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comic-Sprechblasen mit Java2D zeichnen</title>
		<link>http://iluzio.de/archives/412</link>
		<comments>http://iluzio.de/archives/412#comments</comments>
		<pubDate>Thu, 02 Feb 2012 18:42:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Spiele-Programmierung]]></category>
		<category><![CDATA[bubbles]]></category>
		<category><![CDATA[comic]]></category>
		<category><![CDATA[java2d]]></category>
		<category><![CDATA[sprechblase]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=412</guid>
		<description><![CDATA[Hier möchte ich eine Java-Klasse mit Euch teilen, die ich in ähnlicher Form in einem meiner Spiele verwende. Damit kann man mit Java2D, also mit Java-Bordmitteln, Sprechblasen im Comic-Stil zeichnen. Das sieht dann ungefähr so aus: Zeilenumbrüche muss man selbst &#8230; <a href="http://iluzio.de/archives/412">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hier möchte ich eine Java-Klasse mit Euch teilen, die ich in ähnlicher Form in einem meiner Spiele verwende. Damit kann man mit Java2D, also mit Java-Bordmitteln, Sprechblasen im Comic-Stil zeichnen. Das sieht dann ungefähr so aus:</p>
<p><img src="http://iluzio.de/wp-content/uploads/2012/02/bubble_speak_left.png" alt="" title="bubble_speak_left" width="207" height="213" class="alignnone size-full wp-image-415" /></p>
<p>Zeilenumbrüche muss man selbst setzen, und zwar mit <strong>\n</strong> im String. Wenn ich oder jemand von Euch ein Stück Code parat hat, wie man das noch elegant automatisieren könnte, werde ich den Code hier auch gerne noch veröffentlichen.</p>
<p>Weitere Variationen von der normalen Sprechblase, wie man sie oben sehen kann, sind durch Anpassung des Codes sehr einfach machbar:</p>
<p><img src="http://iluzio.de/wp-content/uploads/2012/02/bubble_speak_right.png" alt="" title="bubble_speak_right" width="309" height="244" class="alignnone size-full wp-image-416" /><br />
<img src="http://iluzio.de/wp-content/uploads/2012/02/bubble_think_right.png" alt="" title="bubble_think_right" width="270" height="246" class="alignnone size-full wp-image-418" /><br />
<img src="http://iluzio.de/wp-content/uploads/2012/02/bubble_think_left.png" alt="" title="bubble_think_left" width="287" height="210" class="alignnone size-full wp-image-417" /></p>
<p>Und hier die kommt die vereinfachte Java-Klasse, die nur den Sprech-Schnabel von links implementiert hat. Über Feedback in Form von Kommentaren und Verbesserungsvorschlägen würde ich mich sehr freuen!</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.geom.Path2D</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.geom.RoundRectangle2D</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.image.BufferedImage</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> BubbleFactory <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> X <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> Y <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> BORDER_HORIZONTAL <span style="color: #339933;">=</span> <span style="color: #cc66cc;">15</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> BORDER_VERTICAL <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">double</span> CORNER_ARC_HORIZONTAL_PERCENTAGE <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.55</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">double</span> CORNER_ARC_VERTICAL_PERCENTAGE <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.35</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">double</span> FONT_VERTICAL_OFFSET_PERCENTAGE <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.15</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> BUBBLE_MIN_WIDTH <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> LIP_WIDTH <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> LIP_HEIGHT <span style="color: #339933;">=</span> <span style="color: #cc66cc;">15</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> LIP_OFFSET <span style="color: #339933;">=</span> <span style="color: #cc66cc;">15</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">Image</span> buildBubble<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> text<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// first buffered image for calculations</span>
        <span style="color: #003399;">BufferedImage</span> calcImage <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">BufferedImage</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span>, <span style="color: #cc66cc;">10</span>, <span style="color: #003399;">BufferedImage</span>.<span style="color: #006633;">TYPE_INT_ARGB</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">Graphics2D</span> calcg2d <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Graphics2D</span><span style="color: #009900;">&#41;</span>calcImage.<span style="color: #006633;">getGraphics</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// text and border calculations</span>
        <span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> lines <span style="color: #339933;">=</span> text.<span style="color: #006633;">split</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> textHeight <span style="color: #339933;">=</span> calcg2d.<span style="color: #006633;">getFontMetrics</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getHeight</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> textHeightTotal <span style="color: #339933;">=</span> textHeight <span style="color: #339933;">*</span> lines.<span style="color: #006633;">length</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> textWidthTotal <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> s <span style="color: #339933;">:</span> lines<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">int</span> lineWidth <span style="color: #339933;">=</span> calcg2d.<span style="color: #006633;">getFontMetrics</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">stringWidth</span><span style="color: #009900;">&#40;</span>s<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            textWidthTotal <span style="color: #339933;">=</span> <span style="color: #003399;">Math</span>.<span style="color: #006633;">max</span><span style="color: #009900;">&#40;</span>lineWidth, textWidthTotal<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">int</span> borderWidth <span style="color: #339933;">=</span> <span style="color: #003399;">Math</span>.<span style="color: #006633;">max</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span> <span style="color: #339933;">*</span> BORDER_HORIZONTAL<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> textWidthTotal, BUBBLE_MIN_WIDTH<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> borderHeight <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span> <span style="color: #339933;">*</span> BORDER_VERTICAL<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> textHeightTotal<span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> arcHorizontal <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>borderWidth <span style="color: #339933;">*</span> CORNER_ARC_HORIZONTAL_PERCENTAGE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> arcVertical <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>borderWidth <span style="color: #339933;">*</span> CORNER_ARC_VERTICAL_PERCENTAGE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// actual buffered image</span>
        <span style="color: #003399;">BufferedImage</span> resultImage <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">BufferedImage</span><span style="color: #009900;">&#40;</span>X <span style="color: #339933;">+</span> borderWidth <span style="color: #339933;">+</span> <span style="color: #cc66cc;">10</span>, Y <span style="color: #339933;">+</span> borderHeight <span style="color: #339933;">+</span> <span style="color: #cc66cc;">50</span>, <span style="color: #003399;">BufferedImage</span>.<span style="color: #006633;">TYPE_INT_ARGB</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">Graphics2D</span> g2d <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Graphics2D</span><span style="color: #009900;">&#41;</span>resultImage.<span style="color: #006633;">getGraphics</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        g2d.<span style="color: #006633;">setRenderingHint</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">KEY_ANTIALIASING</span>, <span style="color: #003399;">RenderingHints</span>.<span style="color: #006633;">VALUE_ANTIALIAS_ON</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// border</span>
        <span style="color: #003399;">Shape</span> roundRectangle <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">RoundRectangle2D</span>.<span style="color: #003399;">Double</span><span style="color: #009900;">&#40;</span>X, Y, borderWidth, borderHeight, arcHorizontal, arcVertical<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        g2d.<span style="color: #006633;">setColor</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Color</span>.<span style="color: #006633;">WHITE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        g2d.<span style="color: #006633;">fill</span><span style="color: #009900;">&#40;</span>roundRectangle<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        g2d.<span style="color: #006633;">setColor</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Color</span>.<span style="color: #006633;">BLACK</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        g2d.<span style="color: #006633;">draw</span><span style="color: #009900;">&#40;</span>roundRectangle<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// text</span>
        <span style="color: #000066; font-weight: bold;">int</span> verticalOffset <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>textHeight <span style="color: #339933;">*</span> FONT_VERTICAL_OFFSET_PERCENTAGE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> lines.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">String</span> line <span style="color: #339933;">=</span> lines<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">int</span> lineWidth <span style="color: #339933;">=</span> g2d.<span style="color: #006633;">getFontMetrics</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">stringWidth</span><span style="color: #009900;">&#40;</span>line<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">int</span> x <span style="color: #339933;">=</span> X <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>borderWidth <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #009900;">&#40;</span>lineWidth <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">int</span> y <span style="color: #339933;">=</span> Y <span style="color: #339933;">+</span> BORDER_VERTICAL <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>textHeight <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> verticalOffset<span style="color: #339933;">;</span>
            g2d.<span style="color: #006633;">drawString</span><span style="color: #009900;">&#40;</span>line, x, y<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// lip</span>
        Path2D.<span style="color: #003399;">Double</span> path <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Path2D.<span style="color: #003399;">Double</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">int</span> lipX <span style="color: #339933;">=</span> X <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span>borderWidth <span style="color: #339933;">/</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> LIP_OFFSET<span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> lipY <span style="color: #339933;">=</span> Y <span style="color: #339933;">+</span> borderHeight<span style="color: #339933;">;</span>
&nbsp;
        path.<span style="color: #006633;">moveTo</span><span style="color: #009900;">&#40;</span>lipX, lipY<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        path.<span style="color: #006633;">lineTo</span><span style="color: #009900;">&#40;</span>lipX <span style="color: #339933;">-</span> LIP_WIDTH, lipY <span style="color: #339933;">+</span> LIP_HEIGHT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        path.<span style="color: #006633;">lineTo</span><span style="color: #009900;">&#40;</span>lipX <span style="color: #339933;">-</span> LIP_WIDTH, lipY<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        g2d.<span style="color: #006633;">setColor</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Color</span>.<span style="color: #006633;">WHITE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        g2d.<span style="color: #006633;">fill</span><span style="color: #009900;">&#40;</span>path<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        g2d.<span style="color: #006633;">setColor</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Color</span>.<span style="color: #006633;">BLACK</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        g2d.<span style="color: #006633;">draw</span><span style="color: #009900;">&#40;</span>path<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> resultImage<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>So verwendet man die Klasse</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">Image</span> bubbleImage <span style="color: #339933;">=</span> BubbleFactory.<span style="color: #006633;">buildBubble</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Ich liebe die<span style="color: #000099; font-weight: bold;">\n</span> Sprechblasen von<span style="color: #000099; font-weight: bold;">\n</span>iluZio.de!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/412/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programmieren lernen &#8211; Teil 10 (Hallo Welt!)</title>
		<link>http://iluzio.de/archives/147</link>
		<comments>http://iluzio.de/archives/147#comments</comments>
		<pubDate>Fri, 27 Jan 2012 10:45:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmieren lernen]]></category>
		<category><![CDATA[Befehl]]></category>
		<category><![CDATA[compiler]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[Hallo Welt]]></category>
		<category><![CDATA[javac]]></category>
		<category><![CDATA[Übersetzen]]></category>
		<category><![CDATA[übersetzer]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=147</guid>
		<description><![CDATA[In diesem Artikel werden wir endlich unser erstes Programm mit Java erstellen, übersetzen und ausführen. &#8220;Hallo Welt!&#8221; auf der grünen Wiese Wir wenden uns wieder dem Vergleich mit der grünen Wiese zu. Wir wollen ein ganz neues Programmier-Projekt starten, das &#8230; <a href="http://iluzio.de/archives/147">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In diesem Artikel werden wir endlich unser erstes Programm mit Java erstellen, übersetzen und ausführen.</p>
<p><strong>&#8220;Hallo Welt!&#8221; auf der grünen Wiese</strong></p>
<p>Wir wenden uns wieder dem Vergleich mit der grünen Wiese zu. Wir wollen ein ganz neues Programmier-Projekt starten, das &#8220;Hallo Welt!&#8221;-Projekt. Wir stehen also hier auf der Wiese, nichts ist weit und breit zu sehen. Das bedeutet, dass wir einen neuen, leeren Unterordner in unserem bereits angelegten &#8220;Projekte&#8221;-Ordner anlegen. Dieses neue Verzeichnis nennen wir beispielsweise &#8220;Hallo_Welt&#8221;. Dann stellen wir den Zaun auf, in den nur wir als Programmierer hinein dürfen. Hiermit ist gemeint, dass wir in unserem bisher leeren Verzeichnis eine neue Textdatei anlegen. Das machen wir, indem wir einen Editor öffnen und von da aus die &#8220;Speichern&#8221;-Funktion ausführen. Diese neue Datei soll &#8220;HalloWelt.java&#8221; heißen. &#8220;HalloWelt&#8221; beschreibt, worum es in dieser Datei geht, und &#8220;.java&#8221; macht klar, dass es sich hierbei um Befehle in der Programmiersprache Java handelt.</p>
<p><strong>Output mit Schreibmaschine und Greifarm</strong></p>
<p>Was hat es mit dem &#8220;Hallo Welt!&#8221;-Programm auf sich? Um bei unserem Vergleich zu bleiben, ist &#8220;Hallo Welt!&#8221; folgendermaßen zu verstehen: Wir bauen uns innerhalb des Zauns eine Konstruktion zurecht, die, vielleicht mit einem Roboter an einer Schreibmaschine, &#8220;Hallo Welt!&#8221; auf ein Stück Papier tippt. Ein Greifarm nimmt dann das Papier von der Schreibmaschine und legt es auf das Output-Förderband, das Dinge durch eine der beiden Lücken im Zaun nach draußen transportiert. Diese Aufgabe (Papier beschriften und auf das Förderband legen) wird genau dann ausgeführt, wenn der Benutzer außen den roten Knopf betätigt.</p>
<p>Aus Sicht des Benutzers ist dies ja alles in allem schon eine recht interessante Maschine: Er drückt auf den Knopf, und ein Stück &#8220;Hallo Welt!&#8221;-beschriftetes Papier kommt heraus. Man könnte also sagen, das Programm begrüßt die Welt auf Knopfdruck. Der Benutzer kann so oft auf den Knopf drücken, wie er möchte. Da es Zauberpapier ist, wird es nie ausgehen, und auch der Roboter wird nie des Tippens müde. Es wird immer wieder ein Stück &#8220;Hallo Welt!&#8221;-Papier herauskommen.</p>
<p><strong>Java-Befehle schreiben<br />
</strong></p>
<p>Hier kommen wir nun also zu den ersten Java-Befehlen (die Zeilennummern gehören nicht dazu, nur der Text):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HalloWelt <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hallo Welt!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Wie versprochen werde ich alle Details des Programmierens, also auch diese ersten fünf Zeilen Java-Befehle, Zeichen für Zeichen, Wort für Wort, ganz genau und in allen Einzelheiten erklären. Es ist ganz normal, dass das wie verrücktes Kauderwelsch aussieht, wenn man der Sprache Java noch nie begegnet ist. Aber im Laufe der nächsten Artikel wird das alles klar und absolut verständlich werden. Versprochen! </p>
<p>Fürs Erste müssen wir diese fünf Zeilen Java-Befehle allerdings ohne Kenntnis deren genauer Bedeutung mit dem Editor in die Textdatei &#8220;HalloWelt.java&#8221; schreiben und speichern die Datei ab.</p>
<p><strong>Die Java-Befehle übersetzen</strong></p>
<p>Wir wollen nun diese Java-Befehle, bzw. die Datei, in der sie abgespeichert sind, übersetzen, und zwar in die Java-Zwischensprache.<br />
Für den Anfang gibt es hierfür eine einfache Möglichkeit. Und zwar haben wir ja das JDK installiert, bei dem Werkzeuge dabei sind, die ein Programmierer für seine tägliche Arbeit braucht. Eines dieser Werkzeuge ist genau für die Arbeit gedacht, die wir gerade vor uns haben, und zwar ein Java-Übersetzungs-Programm. Dieses Programm, das man &#8220;Übersetzer&#8221; oder &#8220;Compiler&#8221; nennt, ist ein Kommandozeilen-Programm. Es wurde mit dem JDK auf dem Computer installiert und wird deshalb nicht Kommando genannt, weil es nicht von Anfang an in der Kommandozeile verfügbar war.</p>
<p>Um unsere Java-Datei zu übersetzen, müssen wir zuerst mit dem Kommando &#8220;cd&#8221; in das Verzeichnis unseres Projektes navigieren. Die Kommandos, die man jetzt ausführen muss, sind natürlich immer unterschiedlich, je nach dem wo man gerade in der Konsole &#8220;steht&#8221; (welches das aktuelle Arbeitsverzeichnis in der Konsole ist) und wo wir das Projekte-Verzeichnis angelegt haben.</p>
<table>
<tbody>
<tr>
<td style="font-weight: bold; color: blue;">Windows</td>
<td>Gehen wir davon aus, dass in Windows das aktuelle Arbeitsverzeichnis in der Kommandozeile gerade folgendes ist (ausgehend davon, dass der angemeldete Windows-Benutzer &#8220;Stefan&#8221; heißt):</p>
<pre>C:\Dokumente und Einstellungen\Stefan</pre>
<p>Dann würde man mit den folgenden Kommandos zu unserem &#8220;Hallo Welt!&#8221;-Projektordner gelangen, vorausgesetzt natürlich, dieser wurde schon angelegt, und zwar in &#8220;Eigene Dateien&#8221; (z. B. mit dem Windows-Explorer):</p>
<pre>cd Eigene Dateien
cd Projekte
cd Hallo_Welt</pre>
</td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">Linux, MacOS</td>
<td>Unter Linux und MacOS gehen wir davon aus, dass das aktuelle Arbeitsverzeichnis das Home-Verzeichnis ist. Ein &#8220;pwd&#8221;-Kommando würde dann folgendes ausspucken (ausgehend davon, dass der angemeldete Benutzer gerade &#8220;Stefan&#8221; heißt):</p>
<pre>/home/Stefan</pre>
<p>Dann würde man mit den folgenden Kommandos zu unserem &#8220;Hallo Welt!&#8221;-Projektordner gelangen, vorausgesetzt natürlich, dieser wurde schon angelegt, und zwar im Home-Verzeichnis (z. B. mit einem Datei-Manager wie Nautilus in Linux mit Gnome, dem Konquerer unter Linux mit KDE oder Finder unter MacOS):</p>
<pre>cd Projekte
cd Hallo_Welt</pre>
</td>
</tr>
</tbody>
</table>
<p>Wenn wir jetzt in dem &#8220;Hallo_Welt&#8221;-Ordner stehen, dann müsste ein &#8220;<span style="font-weight: bold; color: blue;">dir</span>&#8221; bzw. ein &#8220;<span style="font-weight: bold; color: green;">ls</span>&#8221; uns genau eine Datei anzeigen, und zwar &#8220;HalloWelt.java&#8221;. Diese hatten wir zuvor mit dem Editor hier abgespeichert.</p>
<p>Jetzt ist nur noch eine weitere Eingabe nötig, um die Übersetzung vorzunehmen:</p>
<pre>javac HalloWelt.java</pre>
<p>Erklärung: &#8220;javac&#8221; ist das Java-Übersetzungs-Programm, von dem weiter oben die Rede war. &#8220;javac&#8221; steht für &#8220;java compiler&#8221; (&#8220;Java Übersetzer&#8221;). Nach einem Leerzeichen muss der volle Name der Datei angegeben werden, die wir übersetzen wollen (&#8220;HalloWelt.java&#8221;). Hat dies ohne Fehlermeldung funktioniert, sehen wir nach einem &#8220;dir&#8221; bzw. &#8220;ls&#8221;, dass plötzlich eine zweite Datei zu der von uns erstellen Datei &#8220;HalloWelt.java&#8221; hinzu gekommen ist. Diese Datei heißt &#8220;HalloWelt.class&#8221;. Sie wurde vom Compiler &#8220;javac&#8221; angelegt. Unsere Ursprungs-Datei &#8220;HalloWelt.java&#8221; wurde vom Compiler nicht verändert und liegt nach wie vor an der Stelle, an der wir sie angelegt haben.<br />
Übrigens kann dieser Übersetzungs-Schritt beliebig oft durchgeführt werden. Die .class-Datei wird dann dabei immer wieder überschrieben.</p>
<p><strong>Die Zwischensprache</strong></p>
<p>Die neue Datei &#8220;HalloWelt.class&#8221; ist die übersetzte Variante von &#8220;HalloWelt.java&#8221;. Spaßeshalber können wir die neu angelegte .class-Datei einmal mit dem Editor öffnen. Wie bereits gelernt, arbeitet man bei Java so, dass die Java-Befehle erst in eine Zwischensprache und dann in Maschinensprache übersetzt werden. Dieser soeben getätigte Schritt mit dem Compiler war der Übersetzungs-Vorgang von Java nach Zwischensprache. Im Editor sehen wir, dass wir nichts sehen. Unschwer ist zu erkennen, dass schon diese Zwischensprache nichts mehr ist, was ein Mensch verstehen können soll oder muss. Mit den vielen Sonderzeichen und unleserlichen Blöcken ähnelt die Zwischensprache viel mehr der Maschinensprache als unseren Java-Befehlen.</p>
<p><strong>Das Programm ausführen</strong></p>
<p>Nun also ist jetzt noch das zu tun, worauf wir die ganze Zeit schon gewartet haben. Wir wollen uns in die Rolle eines Benutzers begeben und bei unserer &#8220;Hallo Welt!&#8221;-Konstruktion auf den roten Knopf drücken. Dies geschieht, wenn wir folgendes in der Kommandozeile eingeben:</p>
<pre>java HalloWelt</pre>
<p>Achtung: Diesmal lautet das Programm, dass wir starten nicht &#8220;javac&#8221;, sondern &#8220;java&#8221;. Und wir schreiben nach &#8220;java&#8221; genau &#8220;HalloWelt&#8221;, nicht etwa &#8220;HalloWelt.java&#8221;, oder HalloWelt.class&#8221;. Wenn wir bis zu dieser Stelle alles richtig gemacht haben, sollte nach unserer Eingabe von gerade eben genau folgendes in die Kommandozeile geschrieben werden:</p>
<pre>Hallo Welt!</pre>
<p>Danach müsste in der Konsole der blinkende Cursor wieder auf neue Eingaben warten. Ein kleiner Schritt für einen Benutzer, aber ein großer Schritt für die Programmierer-Menschheit!</p>
<p>Was ist hier geschehen? Das zweite Programm, das wir gerade aus dem JDK kennen gelernt haben, heißt &#8220;java&#8221;. Wie der Name vielleicht schon vermuten lässt, ist dies das zentralste und wichtigste aller Programme aus dem Java-Umfeld. Damit lassen sich Programme, die in der Java-Zwischensprache vorliegen, in einem einzigen Schritt in Maschinensprache übersetzen und sofort ausführen. Dieses Programm ist übrigens genau so auch in der JRE vorhanden, weil es auch von Benutzern gebraucht wird, die Programme lediglich ausführen wollen und deshalb kein JDK brauchen.</p>
<p><strong>Benutzer und die Kommandozeile</strong></p>
<p>Vielleicht ist bereits die Frage aufgetaucht, ob sich ein Benutzer zum Starten eines Java-Programms immer in die Kommandozeile begeben muss, um Dinge wie </p>
<pre>java HalloWelt</pre>
<p>einzugeben, um ein Programm zu starten. Diese Befürchtung liegt nahe, weil wir das ja gerade auch getan haben, und wir waren ja eben in der &#8220;Benutzer-Rolle&#8221;. Die Antwort: Nein, ein Benutzer wird das nicht tun müssen. Unser kleines Programm liegt allerdings gerade in der &#8220;Roh-Fassung&#8221; vor und lässt sich zum jetzigen Zeitpunkt nur so starten. Später allerdings, wenn es fertiggestellt ist, kann es auf einem anderen Computer installiert werden und ist dann beispielsweise über ein Anwendungs-Menü aufzurufen, wie jedes andere Programm auch.</p>
<p><strong>Hallo schöne Java-Welt!</strong></p>
<p>Gegen Ende dieses Artikels, bzw. nachdem das Wichtigste in diesem Artikel schon besprochen wurde, nämlich das &#8220;Hallo Welt!&#8221;-Programm, möchte ich die Gelegenheit nutzen, um zwei Kleinigkeiten zu demonstrieren, die die Punkte, die wir durchlaufen haben, vertiefen bzw. verdeutlichen sollen.</p>
<p>Erstens werden wir eine kleine Änderung in unserer .java-Datei vornehmen. Wir haben der Tradition zuliebe das ehrwürdige &#8220;Hallo Welt!&#8221;-Programm geschrieben und der Pflicht damit genüge getan. Jetzt aber sind wir damit fertig und verändern das Programm.</p>
<p>Bei genauerer Betrachtung von Zeile 3 erkennen wir die Worte &#8220;Hallo Welt!&#8221;. Es sind exakt die Worte, die beim Starten des Programms in die Kommandozeile geschrieben wurden:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HalloWelt <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hallo Welt!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Wir verändern diese Zeile jetzt so, dass danach &#8220;Hallo schöne Java-Welt!&#8221; steht. Das sollte dann so aussehen:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> HalloWelt <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hallo schöne Java-Welt!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Was in den anderen Zeilen, bzw. vor oder nach &#8220;Hallo schöne Java-Welt!&#8221; steht, lassen wir unverändert. Dann übersetzen wir erneut mit folgender Eingabe:</p>
<pre>javac HalloWelt.java</pre>
<p>Und dann starten wir das Programm nochmal mit:</p>
<pre>java HalloWelt</pre>
<p>Das waren genau die selben Eingaben, die wir bereits getätigt haben. Jetzt sollte </p>
<pre>Hallo schöne Java-Welt!</pre>
<p>in die Kommandozeile geschrieben werden. Damit möchte ich wiederholt verdeutlichen, dass wir mit allem, was wir mit diesen und weiteren Java-Befehlen formulieren, bestimmen können, was unser Programm tut.</p>
<p>Zweitens möchte ich an dieser Stelle noch einmal den Unterschied von Programmierer und Benutzer, diesmal aber von technischer Seite her überdeutlich klarstellen. Dazu machen wir in der Kommandozeile nochmals folgende Eingabe:</p>
<pre>java HalloWelt</pre>
<p>Diese Eingabe machen wir in der Rolle des Benutzers, und wir sollten wieder unsere Konsolen-Ausgabe sehen. Jetzt löschen wir die Datei &#8220;HalloWelt.class&#8221;, die vom &#8220;javac&#8221;-Programm erzeugt wurde, und machen erneut folgende Eingabe:</p>
<pre>java HalloWelt</pre>
<p>Die exakt gleiche Eingabe erzeugt nun im Normalfall so eine Fehlermeldung:</p>
<pre>Exception in thread "main" java.lang.NoClassDefFoundError: HalloWelt
Caused by: java.lang.ClassNotFoundException: HalloWelt
	at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: HalloWelt.  Program will exit.</pre>
<p>Es wird deutlich: Ist die .class-Datei weg, kann das Programm nicht mehr wie zuvor gestartet werden, weil das Programm nicht übersetzt vorliegt.<br />
Deswegen übersetzen wir das Programm jetzt wieder, in der Rolle des Programmierers:</p>
<pre>javac HalloWelt.java</pre>
<p>Die .class-Datei ist wieder da, jetzt kann ein Benutzer das Programm auch wieder mit</p>
<pre>java HalloWelt</pre>
<p>starten. Um das ganze noch ins Extrem zu treiben, löschen wir zu Testzwecken jetzt auch einmal die Datei &#8220;HalloWelt.java&#8221;, also unsere Java-Befehle. Normalerweise würden wir das nicht tun. In die Java-Befehle ist unsere kreative Arbeit geflossen (unsere Konstruktion!), und die ist nach dem Löschen von .java-Dateien üblicherweise verloren. Jetzt sind es allerdings nur 5 Zeilen, die in diesem Artikel ja noch einfach nachzulesen sind. Das Übersetzen mit folgender Eingabe:</p>
<pre>javac HalloWelt.java</pre>
<p>ist jetzt verständlicherweise nicht mehr möglich. Wir bitten das Programm &#8220;javac&#8221; uns die Datei &#8220;HalloWelt.java&#8221; zu übersetzen, diese ist aber gar nicht da: das kann nicht funktionieren. Die Fehlermeldung:</p>
<pre>javac: file not found: HalloWelt.java
Usage: javac &lt;options&gt; &lt;source files&gt;
use -help for a list of possible options</pre>
<p>An dieser Stelle ist aber interessant und äußerst wichtig zu wissen: In unserer Benutzer-Rolle können wir trotzdem noch das Programm starten. Die Eingabe:</p>
<pre>java HalloWelt</pre>
<p>sollte uns die gleiche Ausgabe wie vorher bescheren:</p>
<pre>Hallo schöne Java-Welt!</pre>
<p>Hier wird also klar, dass der Benutzer zum Starten des Programms lediglich die .class-Datei, also das Programm in der Zwischensprache benötigt, nicht aber die .java-Datei, unsere Java-Befehle. Eine Rückwärts-Übersetzung von Zwischensprache nach normale Java-Befehle ist übrigens nur unter äußersten Umständen und in begrenztem Umfang möglich. In vielen Fällen ist dies gar nicht gewünscht und kann deshalb auch gezielt verhindert werden.</p>
<p><strong>Fazit</strong></p>
<p>In diesem Artikel haben wir das &#8220;Hallo Welt!&#8221;-Programm kennen gelernt. Wir haben dazu die Java-Befehle in eine Datei geschrieben. Diese haben wir mit dem Programm &#8220;javac&#8221; übersetzt, wo wir in diesem Schritt die Java-Zwischensprache in Form einer .class-Datei erhalten haben. Mit dieser und mit dem Programm &#8220;java&#8221; konnten wir das Programm so als Benutzer starten.<br />
Auch haben wir das Programm schon einmal verändert und neu übersetzt und ausgeführt. Des Weiteren wurde erklärt, dass ein Benutzer nur die .class-Datei braucht, um das Programm zu starten. Diese Datei kann aber nur von einem Programmierer mit &#8220;javac&#8221; aus dem JDK erzeugt werden, da nur der Programmierer die Java-Befehle in Form einer .java-Datei besitzt, und nur er das JDK installiert hat.</p>
]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/147/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programmieren lernen – Teil 9 (Der Editor)</title>
		<link>http://iluzio.de/archives/282</link>
		<comments>http://iluzio.de/archives/282#comments</comments>
		<pubDate>Sun, 01 Jan 2012 21:49:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmieren lernen]]></category>
		<category><![CDATA[befehle]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[text]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=282</guid>
		<description><![CDATA[In diesem Artikel geht es darum, was ein Editor ist und welche Editoren es gibt. Es wird erklärt, wozu man einen Editor braucht und wie man ihn benutzt. Der Editor Ein Editor ist vergleichbar mit einem Textverarbeitungsprogramm (Microsoft Word, OpenOffice &#8230; <a href="http://iluzio.de/archives/282">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In diesem Artikel geht es darum, was ein Editor ist und welche Editoren es gibt. Es wird erklärt, wozu man einen Editor braucht und wie man ihn benutzt.</p>
<p><strong>Der Editor</strong></p>
<p>Ein Editor ist vergleichbar mit einem Textverarbeitungsprogramm (Microsoft Word, OpenOffice Writer, LibreOffice Writer). Man kann darin Text schreiben (editieren) und in Dateien abspeichern. Der Text in einem Editor ist nicht dazu gedacht, ausgedruckt zu werden. Deshalb gibt es keinen Seitenumbruch, sondern es kann beliebig weit nach unten geschrieben werden. Es ist, als wäre die Seite, auf die man schreibt, unendlich lang. Und auch in die Zeilenbreite, also nach rechts, gibt es keine Begrenzung.</p>
<p>Was man in einem Editor nicht macht, ist den Text zu formatieren, also etwa Schriftarten, Schriftgrößen oder Farben zu ändern. Daran erkennt man schon, dass es in einem Editor nicht um Design und Gestaltung geht, sondern rein um den Inhalt des Textes. Man nennt sie deshalb auch Texteditoren.</p>
<p>Meistens ist in einem Texteditor eine so genannte &#8220;nichtproportionale&#8221; Schriftart eingestellt, z. B. &#8220;Courier New&#8221;. Das bedeutet, der Buchstabe &#8220;i&#8221; ist genau so breit wie ein &#8220;m&#8221;, anders als dies bei einer &#8220;proportionalen&#8221; Schriftart der Fall ist. Der Grund hierfür ist die größere Übersichtlichkeit im Programmiersprachen-Text.</p>
<p><strong>Befehle formulieren</strong></p>
<p>Wir haben bereits gelernt, dass programmieren bedeutet, Befehle in einer Programmiersprache zu formulieren. Diese Befehle sagen genau aus, was der Zweck des Programms ist, was das Programm machen soll. Bisher war jedoch nicht klar, wie das genau geht: Wir müssen Befehle in der Programmiersprache Java als Text formulieren und in einem Texteditor niederschreiben. Diesen Text speichern wir dann in eine Datei ab. So können wir den Text jederzeit wieder verändern, wenn wir später eine Änderung am Programm vornehmen wollen. Genau dieser Text ist es, bzw. die Datei, in der dieser Text abgespeichert wurde, der dann in Maschinensprache, bzw. bei Java erst in eine Zwischensprache, dann in Maschinensprache, übersetzt wird.</p>
<p><strong>Von Java-Befehlen zum ausführbaren Programm</strong></p>
<p>So wird der Arbeitsvorgang langsam klarer: Der Programmierer schreibt Java-Befehle in einem Texteditor, speichert diese in eine Datei ab, die Datei wird in eine Zwischensprache übersetzt, an den Benutzer gegeben, der Benutzer übersetzt die Zwischensprache beim Starten des Programms automatisch in Maschinensprache, das Programm kann so ausgeführt werden.</p>
<p><strong>Verschiedene Editoren</strong></p>
<p>Es gibt viele verschiedene Texteditoren. Auf jedem Betriebssystem (Windows, Linux, MacOS, etc.) ist bereits mindestens ein Texteditor vorhanden, den wir für den Anfang auf jeden Fall verwenden können.</p>
<table>
<tbody>
<tr>
<td style="font-weight: bold; color: blue;">Windows</td>
<td>Unter Windows ist dies schlicht der &#8220;Editor&#8221;, und liegt im Programm-Menü unter “Zubehör”.</td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">Linux</td>
<td>Unter Linux kommt es darauf an, welche Variante von Linux (Ubuntu, Debian, openSUSE, Fedora, etc.) und welchen Fenster-Manager (Gnome, KDE, xfce, etc.) man verwendet. Je nach dem sind dann bestimmte Editoren vorinstalliert. Unter Gnome sind dies oft &#8220;gedit&#8221;, unter KDE beispielsweise &#8220;kate&#8221;. Diese liegen zumeist in einem &#8220;Zubehör&#8221;-Menü. Es können aber unzählige weitere Editoren beispielsweise über die entsprechende Paketverwaltung nachinstalliert werden.</td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">MacOS</td>
<td>In MacOS kann man &#8220;TextEdit&#8221; verwenden.</td>
</tr>
</tbody>
</table>
<p><strong>Ein Beispiel-Befehl</strong></p>
<p>An dieser Stelle öffnen wir zum ersten Mal einen Editor. Es ist meistens ein Fenster mit einem weißen Textbereich, der den größten Teil des Fensters einnimmt. Oben gibt es fast immer ein Menü mit Einträgen wie &#8220;Datei&#8221;, &#8220;Bearbeiten&#8221;, &#8220;Ansicht&#8221; usw&#8230;<br />
Wie in einem Textverarbeitungsprogramm kann man auch in einem Texteditor schreiben was man möchte. Ein Editor ist nämlich nicht speziell ein Programmier-Werkzeug. Es kann auch für die Einkaufsliste, ein Tagebuch oder beliebige andere Informationen in Textform verwendet werden. Auch viele Dateien, mit denen man ein Betriebssystem verwalten kann, werden üblicherweise mit Texteditoren bearbeitet.</p>
<p>Tippen wir doch einfach mal einen Befehl in den Editor ein:</p>
<pre>Computer, ich befehle Dir, addiere die Zahlen 3 und 5,
und schreibe das Ergebnis in die Kommandozeile.</pre>
<p>Diesen Befehl haben wir nun in &#8220;Deutsch&#8221;, nicht in &#8220;Java&#8221; formuliert. Das folgt erst im nächsten Schritt. Aber immerhin steht schon ein Befehl im Editor. Und diesen wollen wir jetzt in eine Datei abspeichern. Dazu wählen wir oben im Menü den Punkt <em>Datei &gt; Speichern</em>. Es öffnet sich ein &#8220;Speichern&#8221;-Fenster, weil der Editor wissen möchte, in welchem Ordner die Datei abgespeichert werden soll, und wie die Datei heißen soll.</p>
<p><strong>Speicherort und Dateiname</strong></p>
<p>Für jedes Programm, das wir entwickeln, sollten wir einen eigenen Ordner anlegen, weil jedes Programm auf seiner ganz eigenen grünen Wiese entwickelt wird. Alle Dateien, die mit dem Programm zu tun haben, werden in diesem Ordner abgelegt. Dazu gehören sowohl die Befehls-Dateien, die bei uns in der Programmiersprache Java geschrieben sind, als auch alle anderen Dokumente, die der Programmierer zur Erstellung des Programms benötigt. Das könnten Text- und Tabellen-Dokumente sein, die zur Planung des Programms verwendet werden. Aber es werden auch beispielsweise Grafiken und Musik-Dateien in diesem Ordner abgelegt, die dann direkt im Programm eingebaut werden, z. B. in einem Spiel.<br />
Es gibt keine Vorgabe, wo auf dem Computer der Ordner erstellt werden muss. Ein &#8220;Projekte&#8221;-Ordner, der alle zukünftigen Programm-Projekte beinhaltet, ist eine gute Idee. Dieser könnte dann unter <span style="font-weight: bold; color: blue;">Windows</span> in den <span style="font-weight: bold; color: blue;">&#8220;Eigenen Dateien&#8221;</span> liegen (<span style="font-weight: bold; color: green;">&#8220;Persönlicher Ordner&#8221; oder &#8220;Home&#8221;</span> unter <span style="font-weight: bold; color: green;">Linux</span>, <span style="font-weight: bold; color: green;">&#8220;Benutzerordner&#8221;</span> unter <span style="font-weight: bold; color: green;">MacOS</span>). Also legen wir diesen &#8220;Projekte&#8221;-Ordner jetzt an. Darin legen wir noch einen Unterordner &#8220;ErstesProjekt&#8221; an. Leerzeichen in Ordnernamen, sowie auch in Dateinamen, sind zwar erlaubt, aber vor Allem bei der Arbeit mit der Kommandozeile ist dies hinderlich und schafft unnötige Probleme. Deshalb sollten wir aus Gründen der Leserlichkeit statt Leerzeichen an entsprechenden Stellen Unterstriche oder &#8220;camel case&#8221; verwenden. &#8220;Camel case&#8221; bedeutet, Wörter so zusammen zu setzen, dass innerhalb eines Wortes mit einem Großbuchstaben begonnen wird, wie bei &#8220;ErstesProjekt&#8221;.</p>
<p>Als Dateinamen wählen wir für unser obiges Beispiel &#8220;ZweiZahlenAddieren.deutsch&#8221; aus. &#8220;ZweiZahlenAddieren&#8221; drückt ganz einfach den Zweck des Programms mit &#8220;camel case&#8221; aus, gefolgt von &#8220;.deutsch&#8221;. Dies wird &#8220;Dateiendung&#8221; oder &#8220;Dateinamens-Erweiterung&#8221; genannt. Allgemein ist eine Dateiendung dazu gedacht, zu beschreiben, um was für eine Datei es sich handelt, ohne dass man sich den Inhalt der Datei anschauen muss. Beispiele: Einfache Text-Dateien haben oft die Dateiendung &#8220;.txt&#8221;, also z. B. &#8220;Tagebuch.txt&#8221;. Microsoft Word-Dokumente heißen fast immer &#8220;.doc&#8221;, es gibt Videos, die mit &#8220;.mov&#8221;, für &#8220;Movie&#8221;, enden. Bei Dateien, die Programmiersprachen-Befehle enthalten, hat es sich eingebürgert, dass die Datenendung die Sprache bezeichnet, die die Datei enthält. Wir werden also viel mit &#8220;.java&#8221;-Dateien zu tun haben. Die Programmiersprache &#8220;C&#8221; ist immer in &#8220;.c&#8221;-Dateien zu finden, Pascal wird in &#8220;.pas&#8221;-Dateien abgespeichert. Um diese Konvention konsequent zu verwenden, und dass wir uns jetzt schon einmal daran gewöhnen, heißt unsere Beispiel-Datei &#8220;ZweiZahlenAddieren.deutsch&#8221;, weil der Befehl in Deutsch geschrieben ist.</p>
<table>
<tbody>
<tr>
<td style="font-weight: bold; color: blue;">Windows</td>
<td><strong>Dateinamens-Erweiterung in Windows anzeigen</strong></p>
<p>Eine Dateiendung gehört vollständig zum Datennamen dazu. Auf Windows-Computern wird diese Dateiendung aber zum Teil ausgeblendet, d. h. sie ist u. U. im Dateibrowser &#8220;Windows Explorer&#8221; nicht zu sehen. Von unserem kompletten Dateinamen &#8220;ZweiZahlenAddieren.deutsch&#8221; wäre dann nur &#8220;ZweiZahlenAddieren&#8221; sichtbar, &#8220;.deutsch&#8221; wäre unsichtbar. Dieses irreführende Verhalten des Windows Explorers wollen wir als Programmierer nicht haben. Gut, dass es sich abschalten lässt. Zu finden ist diese Funktion in den &#8220;Ordneroptionen&#8221;, sie heißt &#8220;Erweiterungen bei bekannten Dateitypen ausblenden&#8221;. Falls der Haken aktiviert sein sollte, muss man diesen einfach wegklicken und schon werden auch unter Windows korrekterweise bei allen Dateien die Endungen dargestellt.</td>
</tr>
</tbody>
</table>
<p><strong>Fazit</strong></p>
<p>Wir wissen nun, was ein Editor, bzw. ein Texteditor ist, und wozu man ihn braucht. Wir haben sogar schon eine erste Datei damit angelegt, die einen Programmiersprachen-Befehl enthält, allerdings in Deutsch, nicht in Java.</p>
]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/282/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programmieren lernen – Teil 8 (Die Kommandozeile)</title>
		<link>http://iluzio.de/archives/217</link>
		<comments>http://iluzio.de/archives/217#comments</comments>
		<pubDate>Mon, 19 Dec 2011 10:48:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmieren lernen]]></category>
		<category><![CDATA[input]]></category>
		<category><![CDATA[Kommando]]></category>
		<category><![CDATA[kommandozeile]]></category>
		<category><![CDATA[Konsole]]></category>
		<category><![CDATA[output]]></category>
		<category><![CDATA[Terminal]]></category>

		<guid isPermaLink="false">http://iluzio.de/?p=217</guid>
		<description><![CDATA[In diesem Artikel geht es darum, was die Kommandozeile ist, wozu man sie braucht und wie man sie benutzt. Die Kommandozeile Jetzt endlich ist es an der Zeit, die Kommandozeile kennen zu lernen. Diese wird oft auch &#8220;Terminal&#8221; oder &#8220;Konsole&#8221; &#8230; <a href="http://iluzio.de/archives/217">Read More <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In diesem Artikel geht es darum, was die Kommandozeile ist, wozu man sie braucht und wie man sie benutzt.</p>
<p><strong>Die Kommandozeile<br />
</strong></p>
<p>Jetzt endlich ist es an der Zeit, die Kommandozeile kennen zu lernen. Diese wird oft auch &#8220;Terminal&#8221; oder &#8220;Konsole&#8221; genannt, also falls diese Begriffe in Zukunft auftauchen, ist damit immer die Kommandozeile gemeint. Mit Hilfe der Kommandozeile können ganz bestimmte Programme, nämlich Kommandozeilen-Programme gestartet und bedient werden. Beispiel: Unser erstes Programm, das &#8220;Hallo Welt!&#8221;-Programm ist ein Kommandozeilen-Programm und wird deshalb im Rahmen einer Kommandozeile laufen. Rein prinzipiell könnte man ein Kommandozeilen-Programm auch außerhalb einer Kommandozeile ausführen. Nur dann wäre es dem Benutzer nicht möglich das Programm zu bedienen. Genau für diesen Zweck wird nämlich die Kommandozeile gebraucht: als Umgebung, um mit den Programmen, die in ihr laufen, Input und Output auszutauschen. Der Vollständigkeit halber möchte ich erwähnen, dass es eine Gattung von Programmen gibt, die tatsächlich ohne Dateneingabe und -ausgabe ihre Arbeit verrichten, so genannte Dienstprogramme. Das sind zumeist Betriebssystem-Programme, die im Hintergrund laufen und z. B. die Computer-Hardware überwachen. Solche Dienstprogramme sind in der Tat Kommandozeilen-Programme, die nicht in einer Kommandozeile laufen, sie sind aber eine Ausnahme.</p>
<p><strong>Eine Kommandozeile öffnen</strong></p>
<p>Wir werden jetzt einfach eine Kommandozeile starten. Auf jedem Betriebssystem hat sie einen anderen anderen Namen und ist an einer anderen Stelle in den Menüs zu finden.</p>
<table>
<tbody>
<tr>
<td style="font-weight: bold; color: blue;">Windows</td>
<td>Unter Windows heißt sie &#8220;Eingabeaufforderung&#8221; und liegt im Programm-Menü unter &#8220;Zubehör&#8221;.</td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">Linux</td>
<td>Unter Linux gibt es verschiedene Kommandozeilen, meistens mit dem Namen &#8220;Terminal&#8221;.</td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">MacOS</td>
<td>In MacOS heißt die Kommandozeile &#8220;Terminal&#8221; und ist in den &#8220;Dienstprogrammen&#8221; zu finden.</td>
</tr>
</tbody>
</table>
<p>Die Kommandozeile ist zumeist ein Fenster mit dunklem/schwarzem Hintergrund und heller/weißer Schrift. Irgendwo sollte ein Cursor blinken, dann ist die Kommandozeile (das Terminal) bereit, Benutzereingaben aufzunehmen.</p>
<p><strong>Das erste Programm starten</strong></p>
<p>Um ein beliebiges Programm im Rahmen des soeben geöffneten Terminals zu starten, gibt man einfach über die Tastatur den Namen eines Programms ein, gefolgt von einem Betätigen der Enter-Taste. Da wir selbst noch kein Programm erstellt haben, werden wir jetzt zu Anschauungs-Zwecken ein bereits existierendes Programm starten, das bei der Installation des Betriebssystems mitgeliefert wurde. Wir geben also mit der Tastatur folgendes ein:</p>
<pre>help</pre>
<p>Nach dieser Eingabe betätigen wir die Enter-Taste. Das Programm &#8220;help&#8221; spuckt einen ganzen Schwung an Text aus. Darunter (nach dem Text) sollte wieder der Cursor blinken.</p>
<p>Was ist hier passiert? Wir haben mit unserer Eingabe von &#8220;help&#8221; und der Enter-Taste sinnbildlich auf den roten Knopf des existierenden Programms &#8220;help&#8221; gedrückt. Dieses hat uns eine ganze Menge Text auf das Output-Förderband gelegt, den wir über die Kommandozeile angezeigt bekommen haben. Input hat &#8220;help&#8221; von uns nicht erhalten. Da der angezeigte Output der einzige Zweck, die einzige Funktion, von &#8220;help&#8221; ist, hat sich das Programm danach wieder beendet. Das sehen wir daran, dass in der Kommandozeile wieder der Cursor blinkt, was bedeutet, dass wir wieder etwas eingeben können. Zum Beispiel könnten wir &#8220;help&#8221; noch einmal starten. Es wird wieder der genau gleiche Output dargestellt werden, das ließe sich beliebig wiederholen. Immer wieder könnten wir &#8220;help&#8221; von Neuem ausführen, es würde einige Zeilen Output in die Kommandozeile schreiben, sofort danach ist help wieder beendet. Jedes erneute Aufrufen von &#8220;help&#8221; entspricht in unserem Vergleich der grünen Wiese einem neuen Drücken auf den roten Knopf.</p>
<p><strong>Kommandos</strong></p>
<p>Es gibt Programme, wie auch das Programm &#8220;help&#8221;, die gehören von Anfang an fest zu einer Kommandozeile dazu. Sie sind immer verfügbar, weil sie sozusagen mitgeliefert wurden. Diese Programme nennt man &#8220;Kommandos&#8221;. Technisch gesehen besteht kein Unterschied zwischen einem Programm und einem Kommando. Kommandos wurden genau wie Programme &#8220;programmiert&#8221;. Sie tragen nur den Namen &#8220;Kommando&#8221;, damit man gleich weiß, dass es Programme sind, die zur Kommandozeile gehören, sie sind fest eingebaut.<br />
Manche dieser Kommandos ähneln sich unter Windows, Linux oder MacOS sehr stark, und manche sind in den Kommandozeilen der verschiedenen Betriebssysteme total unterschiedlich. Dabei ist noch zu erwähnen, dass die Kommandos, die wir in dieser Artikel-Serie verwenden, in Linux und MacOS genau gleich sind. Das hat den Grund, dass Linux und MacOS in ihrem Kern verwandte Betriebssysteme sind.<br />
Unsere eigenen Programme, sowohl das &#8220;Hallo Welt!&#8221;-Programm, das wir zuerst entwickeln, als auch unser Spiel, werden nicht Kommandos genannt. Diese Programme laufen zwar in die Kommandozeile ab, sind aber kein fester Bestandteil dieser.</p>
<p><strong>In der Kommandozeile navigieren</strong></p>
<p>Schauen wir uns einmal den Windows-Explorer, oder auch jeden anderen Datei-Browser wie Nautilus in Linux mit Gnome, den Konquerer unter Linux mit KDE oder beispielsweise Finder unter MacOS, an. Wir sehen, dass man bei der Benutzung immer an einer bestimmten Stelle, an einem bestimmten Ort &#8220;steht&#8221;. Man nennt dies das &#8220;aktuelle Arbeitsverzeichnis&#8221;. Es ist der Ordner, den man sich gerade ansieht, also alle Dateien und Unterverzeichnisse, die sich darin befinden. Durch einen Doppelklick auf einen Unterordner &#8220;springt&#8221; man dorthin, das aktuelle Arbeitsverzeichnis hat sich geändert und ist nun dieser Unterordner. Und meistens gibt es einen &#8220;Zurück&#8221;-Knopf, mit dem man zum letzten besuchten Verzeichnis zurückkehren kann. Auf diese Weise kann man zu allen Verzeichnissen auf dem Computer navigieren und mit den Dateien arbeiten.</p>
<p>Und genau so gibt es auch in der Kommandozeile dieses &#8220;aktuelle Arbeitsverzeichnis&#8221;. Meistens wird es vor dem blinkenden Cursor angezeigt. Man kann es sich aber auch mit einem Programm (einem Kommando) anzeigen lassen.</p>
<table>
<tbody>
<tr>
<td style="font-weight: bold; color: blue;">Windows</td>
<td>Unter Windows heißt das Kommando &#8220;cd&#8221;, für &#8220;current directory&#8221; (aktuelles Verzeichnis):</p>
<pre>cd</pre>
</td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">Linux, MacOS</td>
<td>Unter Linux und MacOS heißt das Kommando &#8220;pwd&#8221;, für &#8220;print working directory&#8221; (drucke Arbeitsverzeichnis):</p>
<pre>pwd</pre>
</td>
</tr>
</tbody>
</table>
<p>Genau wie das Kommando &#8220;help&#8221; schreibt uns &#8220;<span style="font-weight: bold; color: blue;">cd</span>&#8221; bzw. &#8220;<span style="font-weight: bold; color: green;">pwd</span>&#8221; auch etwas in die Kommandozeile, nämlich in welchem Verzeichnis wir uns gerade befinden.<br />
Achtung: Die Verzeichnisse werden unter <span style="font-weight: bold; color: blue;">Windows</span> mit einem <span style="font-weight: bold; color: blue;">rückwärtigen Schrägstrich &#8220;\&#8221;</span> voneinander getrennt, in <span style="font-weight: bold; color: green;">Linux und MacOS</span> ist es ein <span style="font-weight: bold; color: green;">normaler Schrägstrich &#8220;/&#8221;</span>.</p>
<p>Jetzt kennen wir aber noch nicht den Inhalt dieses aktuellen Arbeitsverzeichnisses. Anders als in einem herkömmlichen Datei-Browser müssen wir es nämlich explizit von dem Kommandozeile anfordern, wenn wir wissen wollen, wie es in dem Verzeichnis aussieht, in dem wir uns gerade befinden. Dafür gibt es ein weiteres Kommando.</p>
<table>
<tbody>
<tr>
<td style="font-weight: bold; color: blue;">Windows</td>
<td>Unter Windows heißt das Kommando &#8220;dir&#8221;, für &#8220;directory&#8221; (Verzeichnis):</p>
<pre>dir</pre>
</td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">Linux, MacOS</td>
<td>Unter Linux und MacOS heißt das Kommando &#8220;ls&#8221;, für &#8220;list&#8221; (Auflistung):</p>
<pre>ls</pre>
</td>
</tr>
</tbody>
</table>
<p>Nach Eingabe von &#8220;<span style="font-weight: bold; color: blue;">dir</span>&#8221; bzw. &#8220;<span style="font-weight: bold; color: green;">ls</span>&#8221; erscheinen die Dateien und Unterordner des aktuellen Verzeichnisses.</p>
<table>
<tbody>
<tr>
<td style="font-weight: bold; color: blue;">Windows</td>
<td>Was ein Unterverzeichnis und was eine Datei ist, erkennt man in der Windows-Kommandozeile an dem &#8220;&lt;DIR&gt;&#8221;. Das steht für &#8220;directory&#8221; (Verzeichnis). </td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">Linux, MacOS</td>
<td>Unter Linux/MacOS erkennt man den Unterschied zwischen einer Datei und einem Unterverzeichnis entweder an der Farbe, manchmal sind Verzeichnisse aber auch durch ein &#8220;d&#8221; (directory) gekennzeichnet.</td>
</tr>
</tbody>
</table>
<p>Das Kommando &#8220;<span style="font-weight: bold; color: blue;">dir</span>&#8221; bzw. &#8220;<span style="font-weight: bold; color: green;">ls</span>&#8221; ist sozusagen unser Auge in der Kommandozeile.</p>
<p>Jetzt müssen wir noch wissen, wie wir das aktuelle Arbeitsverzeichnis in der Kommandozeile ändern, d. h. wie wir zu einem anderen Verzeichnis, z. B. einem Unterordner wechseln können.</p>
<table>
<tbody>
<tr>
<td style="font-weight: bold; color: blue;">Windows</td>
<td>Unter Windows benutzt man dazu das selbe Kommando, wie zum Anzeigen des aktuellen Arbeitsverzeichnisses, nämlich &#8220;cd&#8221;, allerdings mit einer Erweiterung. Und zwar gibt man nach dem &#8220;cd&#8221; und einem Leerzeichen den Namen eines Unterordners an:</p>
<pre>cd Bilder</pre>
<p>Dieses Kommando macht nur Sinn, wenn man mit der Kommandozeile an einem aktuellen Arbeitsverzeichnis steht, an dem es auch einen Unterordner &#8220;Bilder&#8221; gibt. In diesem Fall wird dorthin gewechselt. Falls es keinen Unterordner mit dem Namen &#8220;Bilder&#8221; geben sollte, wird eine Fehlermeldung ausgegeben und man bleibt am aktuellen Ort stehen. Zur Überprüfung, ob die Navigation geklappt hat, gibt man unter Windows einfach wieder &#8220;cd&#8221; ein, und lässt sich so das jetzt hoffentlich geänderte Arbeitsverzeichnis ausgeben.</p>
<p><strong>Hinweis:</strong> Oft gibt es auf einem Windows-PC mehrere Laufwerke, die namentlich mit einem Buchstaben und einem Doppelpunkt versehen sind, z. B. &#8220;c:&#8221;, &#8220;d:&#8221;, &#8220;e:&#8221; usw&#8230; Diese Laufwerksbuchstaben stehen für verschiedene im PC eingebaute Festplatten, CD- bzw. DVD-Laufwerke und externe Datenträger wie USB-Festplatten oder &#8211; Sticks. In den meisten Fällen startet die Kommandozeile mit dem Laufwerk &#8220;c:&#8221;, welches historischerweise die erste Festplatte im PC ist. Möchte man mit dem Kommando &#8220;cd&#8221; zu einem Ordner wechseln, der sich nicht auf dem aktuellen, sondern auf einem anderen Laufwerk befindet, ist vorher noch dieser Laufwerks-Buchstabe einzugeben. Beispiel: </p>
<pre>d:
cd Bilder</pre>
</td>
</tr>
<tr>
<td style="font-weight: bold; color: green;">Linux, MacOS</td>
<td>Unter Linux und MacOS heißt das Kommando zum wechseln des aktuellen Arbeitsverzeichnisses auch &#8220;cd&#8221;. Und es funktioniert auch genau so wie unter Windows:</p>
<pre>cd Bilder</pre>
<p>Um hier allerdings zu überprüfen, ob die Navigation geklappt hat, gibt man unter Linux und MacOS &#8220;pwd&#8221; ein, und lässt sich mit diesem Kommando das jetzt hoffentlich geänderte Arbeitsverzeichnis ausgeben.</td>
</tr>
</tbody>
</table>
<p>Wir sind gerade in ein Unterverzeichnis &#8220;hineingewechselt&#8221;. Um wieder ein Verzeichnis zurück zu wechseln, also eine Verzeichnis-Ebene nach oben, kann man sowohl unter Windows, als auch unter Linux und MacOS folgendes Kommando benutzen:</p>
<pre>cd ..</pre>
<p>Die zwei Zeichen &#8220;..&#8221; bezeichnen in der Kommando-Zeile allgemein immer das übergeordnete Verzeichnis, egal wo man gerade steht. Wir werden später auch noch mit anderen Kommandos auf &#8220;..&#8221; stoßen. Jedenfalls müssten wir mit &#8220;cd ..&#8221; wieder genau da landen, wo wir vorher waren.</p>
<p>Mit diesen gerade gelernten Kommandos kann man genau wie in einem Datei-Browser durch alle Verzeichnisse auf dem Computer navigieren: Wir können in Verzeichnisse hinein- und wieder zurückwechseln und uns an den Orten, wo wir gerade stehen, den Inhalt anzeigen lassen.</p>
<p><strong>Fazit</strong></p>
<p>In diesem Artikel haben wir gelernt, dass eine Kommandozeile eine Umgebung ist, in der man Kommandozeilen-Programme starten und mit ihnen Input und Output austauschen kann. Wir haben zum Ausprobieren das Programm &#8220;help&#8221; gestartet und Output erhalten.<br />
Wir wissen auch, dass Programme, die direkt mit der Kommandozeile zu tun haben &#8220;Kommandos&#8221; heißen, und wir haben ein paar dieser Kommandos kennen gelernt, um in der Konsole navigieren zu können.</p>
]]></content:encoded>
			<wfw:commentRss>http://iluzio.de/archives/217/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

