C++ oder Java oder Phyton

antred schrieb:
Na ja, komm ... wie leicht ist es in Java (natürlich auch in C++), einen Singleton zu programmieren. Schwupp, schon hast du deine häßliche globale Variable. Jetzt tarnt sie sich sogar noch als harmlose Klasse. ;)

Wie impelementierst du Singletons? Also ich bekomme keine globale Variable. O.o
 
Ein Singleton _IST_ eine globale Variable. Ist das nicht offensichtlich?
 
Darf ich als Noob fragen, was eine Globale Variable ist?
Am besten als Beispiel erklärt.
 
Code:
#include <iostream>
using namespace std;

int global;

int main()
{
  int lokal;

  return 0;
}
 
Ah, okay.

Aber warum ist das so schlecht?
 
Das kann schlecht sein wenn man die Ausgabe einer Funktion von einer globalen Variable abhängig macht. Das führt ggf. zu schwer zu findenen Bugs und macht es mitunter schwerer die Anwendung zu erweitern...

Man sollte es nicht per se verteufeln aber meistens ist es keine gute Idee.

Gerade als Anfänger kommt man während man programmiert häufig an den Punkt das man irgend einen Wert braucht aber keinen Zugriff auf den Ort hat an dem er abgelegt ist - die meisten Anfänger fangen dann an diesen Wert global zugänglich zu machen oder ihn halt in Klassen zu verlegen auf die man zu dem Zeitpunkt zugriff hat - das führt dann über kurz oder lang zu wilden bezügen zwischen Klassen / Funktionen / globalen Variablen.
 
Mortal schrieb:
Man sollte es nicht per se verteufeln aber meistens ist es keine gute Idee.

Ehrlich gesagt halte ich das Verteufeln von globalen Variablen für eine ausgezeichnete Idee. ;) Ich weiß, es wird immer wieder mal gesagt, daß es auch für globale Variablen eine Daseinsberechtigung gibt, aber ich habe in 12 Jahren Programmiererfahrung noch nicht einen einzigen Fall erlebt, in dem globale Variablen (abgesehen von Konstanten) sinnvoll wären. Und ich kann mir auch nach angestrengtem Nachdenken keinen Fall vorstellen, in dem eine globale Variable wünschenswert wäre.
 
BomberDeluxe schrieb:
  • Skriptsprache
  • erstmal einfache Sachen damit schreiben, wie kleine Hilfsprogramme
  • das ganze sollte relativ leicht zu lernen sein, d.h. man sollte für die Grundlagen nicht erst ein ganzes Studium brauchen
  • open Source Programmierumgebungen
  • sollte mind. auf Win und Linux laufen

Was meint ihr?
Hat jemand Erfahrung mit Phyton?

Ich hab Erfahrungen mit allen drei Sprachen und kann dir nur Python empfehlen. Ich selbst hab mit C/C++ angefangen, was wegen der Komplexität manchmal recht frustrierend war.

Python ist auch die einzige Sprache, bei der alle Punkte oben zutreffen :)

EDIT: Ein guter Anfang für Programmier-Einsteiger: http://abop-german.berlios.de/read/index.html
 
Zuletzt bearbeitet:
antred schrieb:
Ehrlich gesagt halte ich das Verteufeln von globalen Variablen für eine ausgezeichnete Idee. ;) Ich weiß, es wird immer wieder mal gesagt, daß es auch für globale Variablen eine Daseinsberechtigung gibt, aber ich habe in 12 Jahren Programmiererfahrung noch nicht einen einzigen Fall erlebt, in dem globale Variablen (abgesehen von Konstanten) sinnvoll wären. Und ich kann mir auch nach angestrengtem Nachdenken keinen Fall vorstellen, in dem eine globale Variable wünschenswert wäre.

Och, ich benutze z.B. in einigen VBA Projekten globale Variablen - teilweise weils nicht anders geht. Man muss sich das halt gut überlegen - bisher ist es mir nicht auf die Füße gefallen.
In C++ und Java fällt mir jetzt auch kein Fall ein ;). Nur da meine Vorstellungskraft stark begrenzt ist drücke ich mich lieber allgemein mal etwas diplomatischer aus!
 
Yuuri schrieb:
Code:
#include <iostream>
using namespace std;

int global;

int main()
{
  int lokal;

  return 0;
}

Code:
namespace Foobar
{
  class Program
  {
    int nichtGlobal;

    static int Main( string[] args )
    {
      int lokal;
      return 0;
    }
  }
}

Und nun? Wer erklärt ihm den Unterschied ;)
 
Die global-Variable "gilt" in der ganzen Datei, die lokal-Variable nur innerhalb der geschweiften Klammern von "main()". Die nichtGlobal-Variable ist eine Klassenvariable, d.h. die gilt innerhalb der geschweiften Klammern von "class Program" (abgesehen von der static-Funktion).
 
Zuse schrieb:
Die global-Variable "gilt" in der ganzen Datei [...]

Die gilt sogar im ganzen Programm. Eine andere Übersetzungseinheit muß lediglich ein

Code:
extern int global;

enthalten, und schon kann sie die Variable nach Belieben lesen / schreiben.
 
Zuse schrieb:
Die global-Variable "gilt" in der ganzen Datei, die lokal-Variable nur innerhalb der geschweiften Klammern von "main()". Die nichtGlobal-Variable ist eine Klassenvariable, d.h. die gilt innerhalb der geschweiften Klammern von "class Program" (abgesehen von der static-Funktion).

Ja, aber auf was ich hinaus will ist eigentlich das Beispiel an sich.
Dieses Beispiel ist verwirrend. Es gibt Sprachen, in denen es keine globalen Variablen gibt, wie z.B. C# (oben), Java oder VB, was der TE ja nun unausweichlich demnächst lernen muss.
Daher ist es vlt. nicht unbedingt empfehlenswert einem Anfänger einzutrichtern, dass alles was ausserhalb einer Methode deklariert wird als global bezeichnet wird und somit automatisch schlecht ist.
 
Ich finde, dass wenn man mit einer Sprache in Berührung kommt, die Basics einer jeden lernen sollte. Dass dann so etwas wie Klassen in C# und Java nur vorkommt, lernt man frei aus der Leber. C/C++ und Konsorten sind eben Multiparadigmen Sprachen, welche auch funktional/prozedural arbeiten können, wenn man denn nur will.

Ich muss aber auch nicht alles erklären, was extrem leicht mittels Google zu lösen ist. ;) Ist auch nicht die Aufgabe eines Forums alles doppelt und dreifach durchzukauen.
 
Diese ganze Diskussion über Sinn und Unsinn von globalen Variablen ist ohnehin überflüssig und verwirrend für einen Anfänger. Zum Üben kann man auch mal globale Variablen verwenden, das hat am Anfang doch jeder so gemacht.
 
Also, eine kleine Frage noch. Ich habe jetzt angefangen Python zu lernen. Allerdings Version 2.6, da ich nur dafür ansprechende Tutorials gefunden habe. Allerdings hat jetzt mein Lehrer gesagt, es würde sich eher lohnen Python 3.2 zu lernen, da es einfach einfacher und besser und aktueller ist.

Was meint ihr, macht das große Unterschiede?
Gibt es irgendwo gute deutsche Tutorials für Python 3.2?
 
Wenn man ,Neu' lernt, sollte man sich an die aktuelle Version halten. Alte Sprachversionen zu lernen macht nur sinn, wenn man Code hat, der gewartet werden muss und eben in einer älteren Version vorliegt.
Zudem kommt es dann drauf an, was man genau machen will. Weil teilweise die Versionen unterschiedlich sind(NICHT KOMPATIBEL) usw, aber für den Privatgebrauch wäre das total irrelevant (da du es ja nur nutzt).

Für Python von 2 auf 3 wäre das:
- strings are unicode by default
- clean unicode/bytes separation
- exception chaining
- function annotations
- syntax for keyword-only arguments
- extended tuple unpacking
- non-local variable declarations


Hier findest du dazu auch noch mal ein Artikel genau für Phyton!
http://wiki.python.org/moin/Python2orPython3


Und wegen Tutorials zu neuen Versionen. Oft ist es dann so, dass man explizit nach den Veränderungen suchen muss, da die Sprache sich ja nicht neu erfindet, sondern das Grundgerüst gleich bleibt. Daher haben viele allgemeine Tutorials auch weiterhin volle Gültigkeit, auch, wenn eine andere Version in der Überschrift steht.
Eventuell würde man das nur in einer neueren Version anders umsetzen. ; )
 
Zuletzt bearbeitet:
Zurück
Oben