Java Taschenrechner // Code nicht Anfängerfreundlich =0

05/08/2014 10:06 Crystal M0th#1
Hallo,

ich begonnen Java zu lernen und als kleine Aufgabe habe ich mir vorgenommen einen kleinen Taschenrechner zu erstellen.
Ich muss ehrlich sagen, dass es in C++ wirklich einfacher ist eine TR zu schreiben als in Java, vor allem, weil der gesammte Code in C++ kürzer und einfacher ist. Oder kann man das auch kürzer zusammenfassen in Java?

Java Taschenrechner Code:

05/08/2014 11:07 XxharCs#2
Das liegt vielleicht daran, dass man in C++ so wie in jeder anderen Programmiersprache die Variablen am Anfang deklariert, die nötigen Imports nimmt und somit Klassen "normal" erstellt.

Was du jedoch da machst ist, du importes die java.util nicht, somit gibst du den ganzen Pfad an wenn du den Scanner erstellst. Zweitens erstellst du eine Variable immer nach einem S.o.p. was naja, wie soll ich das sagen, wie oben beschrieben solltest die Variablen am Anfang deklarieren und erst danach initialisieren.

Am Ende kommt es aufs selbe raus, was die länge angeht.


Edit: Mein Taschenrechner in C, den ich damals gemacht habe(als ich angefangen hab C zu lernen), war vielleicht doppelt solang als deins oder die meisten anderen Taschenrechner. =>
05/08/2014 12:36 Mostey#3
Quote:
Originally Posted by XxharCs View Post
Das liegt vielleicht daran, dass man in C++ so wie in jeder anderen Programmiersprache die Variablen am Anfang deklariert,

Zweitens erstellst du eine Variable immer nach einem S.o.p. was naja, wie soll ich das sagen, wie oben beschrieben solltest die Variablen am Anfang deklarieren und erst danach initialisieren.
Seit wann deklariert man Variablen am Anfang? Das wird total unübersichtlich je länger die Funktion wird.

Was ist ein S.o.p. und warum sollte der die Variable nicht danach erstellen?
05/08/2014 12:55 XxharCs#4
Quote:
Originally Posted by Mostey View Post
Seit wann deklariert man Variablen am Anfang? Das wird total unübersichtlich je länger die Funktion wird.
Was wär daran unübersichtlich? Gerade wegen der Übersichtlichkeit, werden Variablen am Anfang deklariert. Initialisieren kann man sie wann man will, aber deklarieren sollte man am Anfang, weil schönes programmieren, Übersichtlichkeit, Paradigmen etc.


Quote:
Originally Posted by Mostey View Post
Was ist ein S.o.p. und warum sollte der die Variable nicht danach erstellen?
S.o.p = System.out.print(ln).
Ich sage nicht, dass sie nicht danach erstellt werden soll, mein Kommentar bezieht sich generell auf sein Bsp. jetzt. Klar, dass man irgendwann nach einer Operation eine Variable erstellen will, aber wie gesagt, besser am Anfang deklarieren und erst später bei der Verwendung initialisieren usw.
05/08/2014 13:14 Mostey#5
Quote:
Originally Posted by XxharCs View Post
Was wär daran unübersichtlich? Gerade wegen der Übersichtlichkeit, werden Variablen am Anfang deklariert. Initialisieren kann man sie wann man will, aber deklarieren sollte man am Anfang, weil schönes programmieren, Übersichtlichkeit, Paradigmen etc.
Und wenn ich den Datentyp der Variable wissen will? Und nein, gewisse Kürzel in einen Variablennamen aufnehmen ist auch nicht sauber.

Die Position der Deklarierung ist überhaupt kein Faktor von sauberer und schöner Programmierung. (Scopes mal ausgenommen)

Quote:
Originally Posted by XxharCs View Post
S.o.p = System.out.print(ln).
Ich sage nicht, dass sie nicht danach erstellt werden soll, mein Kommentar bezieht sich generell auf sein Bsp. jetzt. Klar, dass man irgendwann nach einer Operation eine Variable erstellen will, aber wie gesagt, besser am Anfang deklarieren und erst später bei der Verwendung initialisieren usw.
Wieso? In diesem Beispiel ist der Code vielleicht übersichtlich weil er einfach aus wenigen Zeilen besteht, hast du aber mal mehr Code in einer Funktion und kompliziertere Vorgänge, schneidest du dir damit ins eigene Fleisch.

Du kannst mir das glauben, ich hab' auch mal ne Zeit lang so gedacht.
05/08/2014 14:01 dowhile#6
Quote:
Originally Posted by Crystal M0th View Post
schreiben als in Java, vor allem, weil der gesammte Code in C++ kürzer und einfacher ist. Oder kann man das auch kürzer zusammenfassen in Java?
Code:
public class Test {

    public static void main(String[] args) {
        java.util.function.Function<String, String> f = (t) -> {
            System.out.println(t);
            return new java.util.Scanner(System.in).next();
        };
        double a = Double.parseDouble(f.apply("Zahl 1:"));
        double b = Double.parseDouble(f.apply("Zahl 2:"));
        double[] r = {a * b, a + b, 0, a - b, 0, a / b};
        System.out.println("Ergebnis: " + r[f.apply("+,-,*,/").charAt(0) - '*']);
    }
}
Etwas kürzer.
05/30/2014 13:30 SHEEERO#7
Quote:
Originally Posted by Mostey View Post
Und wenn ich den Datentyp der Variable wissen will? Und nein, gewisse Kürzel in einen Variablennamen aufnehmen ist auch nicht sauber.

Die Position der Deklarierung ist überhaupt kein Faktor von sauberer und schöner Programmierung. (Scopes mal ausgenommen)
Also wir bauen unsere Programme in der Schule nach den UML Diagrammen auf. Und das ist auf jedenfalls hilfreich!
05/30/2014 14:54 Schlüsselbein#8
Um auch mal meinen Senf zum Deklarieren der Variablen zu geben: So lokal wie möglich; so global, wie nötig. Oder deklariert ihr eure Zählvariablen für Schleifen auch schon zu Beginn der Funktion?
Ausserdem wurde eben genau dieses Feature nicht umsonst mit dem C99 Standard eingeführt.

Stellt euch mal vor, ihr habt ne ellenlange Funktion und zu Beginn direkt mal 12 Variablen, davon 8 mit irgendwelchen Dummywerten initialisiert, deklariert - nicht gerade schön.
Abgesehen davon kann es Fehler vermeiden und dem Compiler das Optimieren erleichtern.


http://de.wikipedia.org/wiki/YAGNI
05/30/2014 15:30 Mostey#9
Quote:
Originally Posted by SHEEERO View Post
Also wir bauen unsere Programme in der Schule nach den UML Diagrammen auf. Und das ist auf jedenfalls hilfreich!
Da werden aber keine lokalen Variablen mit aufgenommen.
05/30/2014 15:53 snow#10
Quote:
Originally Posted by Mostey View Post
Seit wann deklariert man Variablen am Anfang? Das wird total unübersichtlich je länger die Funktion wird.
Frag mal deinen Compiler, wo er denn den Speicher für die Variablen reserviert. :p
05/30/2014 17:10 Black Tiger ツ#11
In Lua muss man alle nicht lokalen variablen "nil-en", damit der Garbage Collector greifen kann. Wenn man das nicht macht, hatte man ein memory-leak.

In C wäre es wahrscheinlich ähnlich, dass man globale variablen wieder aus dem Speicher rauslöschen müsste oder so. Jedenfalls hab ich das auch so verstanden, dass man so viele lokale und so wenige globale wie möglich benutzen sollte.
05/30/2014 18:24 Mostey#12
Quote:
Originally Posted by snow911 View Post
Frag mal deinen Compiler, wo er denn den Speicher für die Variablen reserviert. :p
Es geht um die Position der Deklaration (bzw. Definition) im Code und nicht um den rohen Speicher. Wo die dort liegen kann jedem ja irgendwo egal sein. ;O