Sonntag, 18. Dezember 2016

Lua Tutorial - #02 - Variable & Tables

Variable

In lua benötigt man bei der definition von variabeln keinen typen angeben. In Lua kann jede variable jeden typen annehmen. Es gibt lediglich 2 zugriffs operatoren 'local' und 'global'.


Eine Variable die keinen dieser zugriffsopreatoren hatt ist automatisch global.
global = von überall zugreifbar, braucht nicht deklariert werden
local = nur in dieser datei / funktion nutzbar

Der rest ist einfache variable manipulation. Mit '=' weisen wir der variable einen wert zu, abrufen wird durch einfaches einsetzen der variable durchgeführt.

Tables

Tables sind in lua ein all-arounder variabeln typ. Er kann als array und als key=value (map) abruf verwendet werden.

Um die anzahl der einträge zu ermitteln wird ein vorgestelltes '#' benutzt.

- Arrays

Bei arrays (auch manchmal listen gennant) in lua ist darauf zu achten das das erste element nicht wie bei anderen programmiersprachen auf der [0] liegt sondern auf der [1]. Der syntax für die deklaration ist wie folgt: 'tVar = { <value>, <value>, ... }'. In lua ist es häufig üblich ein kleines t am anfag der variable zu schreiben um darauf hinzuweisen das es sich hierbei um ein table handelt. In <value> kann alles eingesetzt werden was man gerade so benötigt.

Zum abruf bzw setzen eines eintrages wird einfach 'tVar[i]' benutzt.


- Maps

Maps sind eigentlich sehr einfach zu deklarieren: 'tVar = { <key> = <value>, ... }'. Dabei ist darauf zu achten das bei <key> keinerlei variabeln (also z.b. eine 0 oder ein string wie z.b. "insert" o.a) genutzt wird, sondern einfach der name des eintrages einfach eingetragen wird (fast so wie die deklaration von variabeln, nur ohne den zugriffsoperator).

Um einen eintrag auszulesen bzw zu setzen wird einfach 'tVar.<key>' benuzt.


- Standartfunktionen von lua
Offizielle dokumentation (englisch), übersezung (deutsch)

Samstag, 17. Dezember 2016

Lua Tutorial - #01 - Setup & Hello World

#0 - Lua - ein überblick

Lua zählt wie zB. phyton zu den skriptsprachen. Aber was sind eigentlich skriptsprachen? Im gegensatz zu normalen programmiersprachen, werden skripts nicht komplimiert (auser ein paar ausnahmen) sondern >interpretiert< also der sourcecode wird direkt ausgeführt.
Auch funktioniert Lua im gegensatz zu allen anderen komplimerabhängigen sprachen wie zB. C, C++ oder Java ohne irgendeine main-funktion (ausgenommen sind daraus frameworks wie LÖVE). Direkt in der erste zeile des sourcecodes können wir eine funktion aufrufen zB um text auszugeben.

#0.1 - Die IDE

Als erstes sollten wir mit der IDE loslegen damit wir überhaupt eine möglichkeit haben Lua-skripts zu schreiben und auszuführen.
Ich habe gute erfahrung mit der IDE "ZeroBrane Studio" gemacht, welche kostenlos herunterladbar ist: https://studio.zerobrane.com/
Eine installation ist dabei nicht notwendig, sondern wir müssen lediglich das heruntergeladene Archiv entpacken und die Anwendung starten.



Um ein projekt zu beginnen oder um eines der von der IDE mitgebrachten beispielen auszuführen müssen wir dazu den projekt ordner ändern. Dazu machen wir einen rechts-klicken auf den ordner links im tab 'Project' und wählen unter 'Project Directory' -> 'Set to selected Directory' an. Nun haben wir das projekt erfolgreich geändert.



Wenn ein spezieller interpreter benötigt wird können wir diesen in der Menüleiste unter 'Project' -> 'Lua Interpreter' auswählen. Dies wird benötigt um z.B. die beispiele von LÖVE oder Moai auszuführen. Davor muss der interpreter jedoch installiert werden, da die IDE standartmäßig nur den normalen lua interpreter mitbringt. Tutorials dazu können folgen.

#0.2 - Die dokumentation

Von lua gibt es auf der offiziellen seite eine dokumentation https://www.lua.org/manual/5.3/
Hier können (meist auf einglish) auch gute tutorials gefunden werden, sowie die gesamte übersicht der standartfunktionen.

Für eine deutsche übersetzung aller standartfunktionen siehe hier (in arbeit)

#0.3 - Anmerkungen zum tutorial

Wörter wie z.b. <key> (also mit < am anfang und > am ende) sind lediglich platzhalter und sind zu ersetzen.

Sollte innerhalb einer definition für funktionen (meinst standartfunktionen von lua) ein [] auftauchen, so sind das optionale parameter der funktion

#1 - Hello world

Wir fangen wie jedesmal ein hello world projekt an. Dazu legen wir in unsrem tutorialprojekt eine lua datei an mit dem namen 'HelloWorld.lua'.


Die datei wurde erstellt und mit einem doppelclick wird sie auch gleich zur bearbeitung geöffnet. Nun geben wir den code "print("HelloWorld from Lua!")" ein.


Nun müssen wir nur noch auf die zwei grünen dreiecke nach rechts klicken (runnen) und unser kleines programm wird ausgeführt.


In der roten markierung ist unser ausgegebener text zu sehen. Die methode "print" ist zum ausgeben von debug ausgaben gedacht.

Freitag, 2. September 2016

Java tutorial #1 - Hello world! [mit Eclipse]

Als erstes werden wir das bekannteste Programm der Welt schreiben: Hello World!. Dies ist auch in Java nicht kompliziert.

Neues Projekt

Als erstes benötigen wir ein neues Projekt, dazu machen wir einen rechts-Klick im Tab "Project Explorer" und gehen dort unter "New" auf "Project..."
Neues Projekt erstellen in Eclipse
Nun erscheint ein Dialog wo wir auswählen können welchen typ von Projekt wir denn esrtellt haben wollen. Für den anfang recht ein simples Java Projekt welches wir unter "Java/Java Projekt" auch einfach finden.
Der Projekt Wizard

Nun können wir die Eigenschaften unseres Projektes einstellen unter anderem soetwas wichtiges wie z.B. den Namen. Alles andere interressiert uns nicht.
Eigenschaften des Projektes
Nun haben wir unser erstes projekt erstellt.

Das Programm - Die erste Klasse

Nun wollen wir den benötigten Code schreiben. Java ist eine Objekt-orientierte Sprache. Also benötigt man um code zu erstellen erstmal eine Klasse. Diese wollen wir nun erstellen.
Dazu klappen wir das projekt aus (click auf den kleinen pfeil links neben dem projekt).
Dort machen wir einen rechts-Klick auf den eintrag "src" und gehen auf "New/Class"
Das popup-menu im projekt

Nun öffnet sich ein dialog zum erstellen einer Klasse. Dort lässt sich auch wieder einiges einstellen.
Im Feld "Package" können wir den ort in unserem Projekt wählen wo wir die klasse speichern wollen. (siehe erklärung am ende) Im Feld "Namen" können wir können wir den Namen der klasse angeben.
Der Klassen Wizard
Ich nehme dazu das package "tutorial1" und als klassennamen "HelloWorld"
Ein click auf "Finish" und wir haben eine Klasse erstellt.
Unsere Erstellte Klasse

Das Programm - Der Code

Nun können wir in unsere Klasse den Code einfügen:

Und nun die erklärung zu diesem code:
- Als erstes benötigen wir eine methode als einstiegspunkt. Diese methode heißt "main". In java wird sie wie folgt definert "public static void main(String[] args)". Dabei folgen wir einem einfachen schema: "<zugriffs berechtigungen> <rückgabetyp> name(typ variablename)". WICHTIG! in java ist es wichtig das die main-methode genauso ausieht, da sie sonst nicht erkannt werden kann. Weitere informationen zu den Standard datentypen und den berechtigungen weiter unten.
- Die "{}" sind zeichen um codeblöcke zu defineren.
- Nun der code der überhaupt den text auf unseren bildchirm bringt: "System.out.println()". Nun schritt für schritt: "System" ist eine klasse die standartmäßig immer existiert. Sie enthält einige wichtige objekte und methoden. "out" ist ein Objekt in dieser klasse vom typ "PrintStream". Einfach erklärt gibt ein printstream etwas aus - an die console. "println" ist eine Methode dieses Printstreames und gibt den angegebenen text (im fachjargong einen String) aus und erstellt automatisch einen zeilenumbruch.

Erklärungen:

Packages - was sind sie und was können sie?

Ein package ist ein ordner innerhalb eines Java-programmes. In java ist es so das einige zugriffs-typen den zugriff nur auf klassen in demselben package gewähren. Außerdem sind sie wichtig um eine struktur zu erhalten, in unserem fall um die einzelnden Tutorials voneinander abzugrenzen.

Liste aller (einfachen) berechtigungen

Zu erst sei mal gesagt das diese berechtigungen NUR für: klassen, variablen die in einer klasse direkt deklariert (geschrieben) worden sind, und methoden sind.
Dazu giebt es zwei typen von berechtigungs-typen:
  • Die erste gruppe bestehen aus: private/public/protected und einmal einfach weggelassen. Diese gruppe hatt die besonderheit dass sie nicht miteinander kombinert werden können.
    • private gibt nur der eigenen klasse zugriffsrechte
    • public gibt allen zugriff
    • protected gibt nur klassen zugriff die diese classe als sog. Mutter oder Superklasse haben
    • und keinen zu benutzen bewirkt das nur klassen die mit dieser klasse in einem gleichen package "leben" zugriff
  • Die zweite gruppe besteht aus: static/final
    • static macht das eben halt kein objekt erzeugt werden muss um diese variabel/methode nutzen zu können, ausnahme klassen: diese können immer genutzt werden auser bei verschachtelten klassen, aber das lernen wir später
    • final bewirkt das diese variabel oder das diese methode nicht mehr geändert werden kann also "absolut" ist. Bei klassen bewirkt sie das keine klasse diese klasse als Mutter klasse nutzen kann.

Liste aller standarttypen

Primitive datentypen, also typen die nicht direkt in klassen deklariert werden mussten, und ja in Java wird alles in Klassen deklariert, diese liegen fast alle im standart-package java.lang. Diese klassen sbeichern keine daten sondern stellen nur einige support-methoden zur verfügung.
  • byte: ein byte - 8bit 
  • short: die abgespeckte version des integers - 16bit
  • int: ein integer - 32bit
  • long: eine sehr große zahl - 64bit
  • float: eine gleitkomma zahl - 32bit
  • double: der große bruder von float - 64bit
  • boolean: ein typ der nur 2 zustände kann "true" und "false" - 1bit, ist doch logisch oder?
  • char: ein typ der ein zeichen repräsentiert, codiert in unicode (wertbereich \u0000 - \uffff), deklariert wird es mit ' z.B. >>'c'<< - 16bit
Dann gibt es einige standart klassen die auch immer genutzt werden können:
  • String: objekt das zur darstellung von zeichenketten genutzt wird, deklariert wird es mit ", z.B. >>"HelloWorld"<<

Java tutorial #0 - Das Setup

Hier das erste tutorial meiner Java turorial serie. Heute: das Setup!
Achtung dieses tutorial richtet sich an anfänger in der sprache Java nicht an anfänger im generellen umgang mit Programmiersprachen oder dem PC selbst, d.h. ich werde hier nicht näher darauf eigehen wie man die benötigten programme herunterlädt oder sie installiert. Alle webseiten sollten daher für euch selbsterklärend sein. Falls doch probleme auftauchen sollten helfe ich natürlich gerne.

Die installation von JRE und JDK

Als erstes benötigen wir die Java Laufzeitumgebung (JRE) die wir benötigen um überhaupt java programme, wie z.b. Minecraft, ausführen zu können. Nach dieser intsallation benötigen wir noch das Java Development Kit (JDK) , welches uns erlaubt Java programme überhaupt zu komplimieren.

Installation der IDE:

Die erste IDE die ich euch hier vorstellen will ist eclipse
Die zweite IDE die ihr nutzen könnt ist  netbeans.
Ich nutze persönlich eclipse also werden hier vermehrt screenschots von dieser IDE auftauchen. Welche ihr benutzt ist euch überlassen.

FAQ zu Java:

Warum benötige ich überhaupt eine Laufzeitumgebung und was tut die eigentlich?

Normalerweise wird sourcecode vom Kompiler direkt in maschinencode übersetzt der dann von der CPU ausgeführt werden kann. Auch libs werden in diesen maschinencode eingefügt. (in c durch #include). Das problem hierbei ist das bei unterschiedlichen prozzessoren oder betriebsystemen alles nocheinmal komplimiert werden muss. Java stattdessen nutzt bytecode. Bytecode ist eine abstrakte ebene zwischen sourcecode und maschinencode. Es errinnert schon stark an den maschinencode kann aber von einer CPU nicht direkt ausgeführt werden. Dazu ist eine Laufzeitumgebung nötig, die den bytecode interpretiert und dann den nötigen maschinencode an die CPU sendet. So kann ein Java Programm, wenn es einmal komlimiert ist, auf allen PC's die diese JRE installiert haben laufen.