# Scope vs Gültigkeitsbereich



## mrBrown (26. Jun 2019)

Verschoben von https://www.java-forum.org/thema/liste-ueberschreibt-alte-elemte.185267/


Als genereller Tipp zur Vermeidung solcher Fehler: Den Scope der Variablen möglichst klein halten


----------



## Xyz1 (26. Jun 2019)

Und den Gültigkeitsbereich solcher Variablen möglichst maximieren


----------



## temi (26. Jun 2019)

mrBrown hat gesagt.:


> Als genereller Tipp zur Vermeidung solcher Fehler: Den Scope der Variablen möglichst klein halten





Tobias-nrw hat gesagt.:


> Und den Gültigkeitsbereich solcher Variablen möglichst maximieren



Ich war immer der Meinung, das beides dasselbe meint?


----------



## Xyz1 (26. Jun 2019)

temi hat gesagt.:


> Ich war immer der Meinung, das beides dasselbe meint?


Ne,

```
int i;
//500 Zeilen...
i = 5;
//500 Zeilen...
```
Der Sichtbarkeitsbereich erstreckt sich über 1000 Zeilen, der Gültigkeitsbereich von i "nur" über 500. Vor `int i;` kann natürlich auch noch Zeilen sein...


----------



## mrBrown (26. Jun 2019)

temi hat gesagt.:


> Ich war immer der Meinung, das beides dasselbe meint?


Nicht nur du bist dieser Meinung 






						dict.cc Wörterbuch :: scope :: Englisch-Deutsch-Übersetzung
					

Englisch-Deutsch-Übersetzungen für scope im Online-Wörterbuch dict.cc (Deutschwörterbuch).




					www.dict.cc


----------



## mrBrown (26. Jun 2019)

Tobias-nrw hat gesagt.:


> Ne,
> 
> ```
> int i;
> ...


In in welchem 500 Zeilen ist i außerhalb des eigenen Gültigkeitsbereich?

(Und völlig unabhängig davon ist der Tipp Unsinn, wäre schön, wenn du trollen sein lassen könntest)


----------



## Xyz1 (26. Jun 2019)

Oh, vorsichtig, wegen "trollen" usw. Ein Wörterbuch zu rate zu ziehen ist nicht gerade der beste Beleg...
`i` ist natürlich vor der Initialisierung ungültig/nutzlos, daher ist eine späte Initialisierung zu vermeiden.

Aber um das etwas zu relativieren, tauchen diese Begriffe nur im universitären Umfeld auf - ein normaler Java Entwickler braucht sich darum nicht kümmern.

Es wäre schön wenn Du mit nicht weiter als "troll" usw. titulieren könntest.


----------



## mrBrown (26. Jun 2019)

Tobias-nrw hat gesagt.:


> Ein Wörterbuch zu rate zu ziehen ist nicht gerade der beste Beleg...


Zur Übersetzung englischer Wörter ist üblicherweise ein Wörterbuch „der beste Beleg“.
Was ist denn deiner Meinung nach der passende Englische Begriff für „Gültigkeitsbereich“?



Tobias-nrw hat gesagt.:


> `i` ist natürlich vor der Initialisierung ungültig/nutzlos, daher ist eine späte Initialisierung zu vermeiden.


EDIT: siehe @kneitzel‘s Kommentar, der hat’s besser erklärt.



Tobias-nrw hat gesagt.:


> Aber um das etwas zu relativieren, tauchen diese Begriffe nur im universitären Umfeld auf - ein normaler Java Entwickler braucht sich darum nicht kümmern.


„Scope“ ist ein völlig üblicher Begriff, den auch jeder normale Java-Entwickler kennen sollte. Ist nicht grundlos auch in der JLS zu finden - im Gegensatz zu „Gültigkeitsbereich“.


Und selbst nach deine Auslegung sollte man auch den Gültigkeitsbereich möglichst klein halten.


----------



## kneitzel (26. Jun 2019)

Also ich kann Dir (@Tobias-nrw) nicht wirklich folgen.

Wenn wir hier reden, dann brauchen wir eine klare Grundlage. Diese wird bei Java durch die Java Language Specification gegeben. Und da ist eine solche Unterscheidung nicht zu finden.

Wenn man nun spezieller Begriffe nutzen möchte, dann sollten diese klar definiert werden vor der Nutzung. Ansonsten gehen wir von den üblichen Wörtern aus wie sie z.B. bei Wikipedia definiert sind.

Bezüglich Java ist es wie schon gesagt die JLS und da speziell das 4. Kapitel. So z.B. speziell:
https://docs.oracle.com/javase/specs/jls/se12/html/jls-4.html#jls-4.12.5
"A local variable (§14.4, §14.14) must be explicitly given a value before it is used, by either initialization (§14.4) or assignment (§15.26), in a way that can be verified using the rules for definite assignment (§16 (_Definite Assignment_))."
https://docs.oracle.com/javase/specs/jls/se12/html/jls-6.html#jls-6.3
"The scope of a local variable declaration in a block (§14.4) is the rest of the block in which the declaration appears, starting with its own initializer and including any further declarators to the right in the local variable declaration statement."

Hier könnte man meinen, dass "own initializer" meint, dass es mit der Initialisierung startet, aber das Bezieht sich auf:
https://docs.oracle.com/javase/specs/jls/se12/html/jls-14.html#jls-14.4, denn da wird der Aufbau einer Variablen Deklaration beschrieben welche auch ein VariableInitializer Teil enthalten kann. Und nur so macht der Part mit dem "including any further declarators" Sinn, denn bei der Deklaration von Variablen können mehrere Variablen deklariert werden. Aber das sieht man ja sehr schön in den Kästchen von 14.4.

(@mrBrown Hoffe ich durfte das auch ausführen?)

Was Wikipedia angeht: Da habe ich jetzt so auf Anhieb nicht diese Unterscheidung gefunden. Und daher wäre ich auch der Meinung, dass die einzelnen Begriffe das Gleiche bezeichnen. (Und nur weil eine Variable keinen gültigen Wert hat und somit nicht gelesen werden kann, bedeutet das nicht, dass die Variable ungültig ist. Die Variable ist ja verwendbar.)

Bezüglich So Bereiche groß zu halten: Diese Aussage nachdem wir hier mindestens zwei Diskussionen zu Clean Code hatten bei denen Du auch mitgemischt hast, finde ich schon etwas unverständlich....


----------



## temi (26. Jun 2019)

Edit: War Quatsch.


----------



## Xyz1 (26. Jun 2019)

Gegen Unwissenheit habe ich nix, aber tut doch bitte nicht so als hättet ihr meine Erklärungen nich verstanden.
@kneitzel Natürlich ist eine Variable, ehe initialisiert, ungültig... Was gibt es da überhaupt zu diskutieren???

@Lisa0709 Falls Du noch irgendwelche Fragen hast welche Du nicht mit den hier übrigen Personen diskutieren willst -> PN.


----------



## Meniskusschaden (26. Jun 2019)

kneitzel hat gesagt.:


> Wenn man nun spezieller Begriffe nutzen möchte, dann sollten diese klar definiert werden vor der Nutzung. Ansonsten gehen wir von den üblichen Wörtern aus wie sie z.B. bei Wikipedia definiert sind.





mrBrown hat gesagt.:


> In in welchem 500 Zeilen ist i außerhalb des eigenen Gültigkeitsbereich?


Ich finde, @Tobias-nrw hat mit seinem Beispiel in #13 inzwischen schon gezeigt, was er hier mit dem Begriff Gültigkeitsbereich meint, nämlich die Codebereiche, für die der Compiler nicht sicher sein kann, dass die Variable initialisiert ist. In dem Beispiel also die ersten 500 Zeilen. Keine Ahnung, ob es dafür einen gebräuchlichen Begriff gibt.


----------



## kneitzel (26. Jun 2019)

Tobias-nrw hat gesagt.:


> Gegen Unwissenheit habe ich nix, aber tut doch bitte nicht so als hättet ihr meine Erklärungen nich verstanden.
> @kneitzel Natürlich ist eine Variable, ehe initialisiert, ungültig... Was gibt es da überhaupt zu diskutieren???



Ja, ich frage mich auch, was es da überhaupt zu diskutieren gibt. Die JLS definiert alles klar und deutlich. Und da findet sich nichts von wegen "Variable is ungültig, ehe sie initialisiert wurde". Ungültige Variablen gibt es nicht. Es sei denn, Du zeigst es mir in der JLS.

Was in der JLS steht ist schlicht und einfach und kann für diesen Punkt in Kapitel 16 der JLS nachgelesen werden:
https://docs.oracle.com/javase/specs/jls/se12/html/jls-16.html
"Each local variable (§14.4) and every blank final field (§4.12.4, §8.3.1.2) must have a _definitely assigned_ value when any access of its value occurs."

Und wenn Du den Unterschied zwischen "ungültiger Variablen" und "Variable hat keinen definierten Wert" nicht siehst, dann kann ich Dir auch nicht helfen.

Und wenn die Variable "ungültig" ist: Wieso kann man der dann etwas zuweisen? Also ist sie doch nicht wirklich ungültig...



Meniskusschaden hat gesagt.:


> Ich finde, @Tobias-nrw hat mit seinem Beispiel in #13 inzwischen schon gezeigt, was er hier mit dem Begriff Gültigkeitsbereich meint, nämlich die Codebereiche, für die der Compiler nicht sicher sein kann, dass die Variable initialisiert ist. In dem Beispiel also die ersten 500 Zeilen. Keine Ahnung, ob es dafür einen gebräuchlichen Begriff gibt.



Also da kann man viele Begriffe verwenden. Vor der Initialisierung einer lokalen Variable ist der Wert der Variable undefiniert. Das wäre eine Aussage, die mann treffen könnte. Oder man nimmt Formulierungen aus der JLS und spricht von "Variable ohne mit Sicherheit zugewiesenem Wert".

Und was @Tobias-nrw meint, war aus dem Kontext schon verständlich. Aber was er gesagt hat, ist so schlicht falsch und nicht durch die JLS gedeckt. Die Stellen der JLS, in denen diesbezüglich etwas zu finden ist sowie die wichtigen Sätze habe ich gebracht. Das sind einfache Hinweise auf Fakten und auf die kann @Tobias-nrw gerne eingehen. Aber er geht ja auch auf die Fakten nicht einmal ein. Somit sehe ich hier noch nicht einmal eine Diskussion...


----------



## temi (26. Jun 2019)

@Tobias-nrw Irgendwie mag ich deine Art nicht, aber das ist meine persönliche Meinung. Und tatsächlich ist für mich Scope und Gültigkeitsbereich weiterhin identisch.


----------



## mrBrown (26. Jun 2019)

Meniskusschaden hat gesagt.:


> Ich finde, @Tobias-nrw hat mit seinem Beispiel in #13 inzwischen schon gezeigt, was er hier mit dem Begriff Gültigkeitsbereich meint, nämlich die Codebereiche, für die der Compiler nicht sicher sein kann, dass die Variable initialisiert ist. In dem Beispiel also die ersten 500 Zeilen. Keine Ahnung, ob es dafür einen gebräuchlichen Begriff gibt.


Allerdings ist seine Aussage, dass man den Gültigkeitsbereich maximieren sollte, trotzdem Unsinn, und bliebt das Gegenteil von Scope minimieren


----------



## Xyz1 (26. Jun 2019)

mrBrown hat gesagt.:


> Allerdings ist seine Aussage, dass man den Gültigkeitsbereich maximieren sollte, trotzdem Unsinn, und bliebt das Gegenteil von Scope minimieren


Sichtbarkeitsbereich minimieren und Gültigkeitsbereich maximieren bedeutet im Klartext, eine Variable umgehend zu initialisieren... Hättest Du 5 Sekunden darüber nachgedacht, anstatt Verschwörungstheorien aufzustellen, hättest Du das gewusst.

@temi Glaube wem Du willst.


----------



## Meniskusschaden (26. Jun 2019)

mrBrown hat gesagt.:


> Allerdings ist seine Aussage, dass man den Gültigkeitsbereich maximieren sollte, trotzdem Unsinn, und bliebt das Gegenteil von Scope minimieren


Es geht ja um die Kombination. Ich würde sagen es soll bedeuten, Deklaration und Initialisierung möglichst nahe zueinander zu legen und das Ganze in einen möglichst kurzen (notfalls zusätzlichen) Block zu packen.


----------



## mrBrown (26. Jun 2019)

Tobias-nrw hat gesagt.:


> Sichtbarkeitsbereich minimieren und Gültigkeitsbereich maximieren bedeutet im Klartext, eine Variable umgehend zu initialisieren... Hättest Du 5 Sekunden darüber nachgedacht, anstatt Verschwörungstheorien aufzustellen, hättest Du das gewusst.


Und genau damit tut man nichts, um den Scope zu minimieren. Die Gültigkeit maximieren passiert in Code um den es hier mal ging, hilft allerdings nichts, sondern ganz im Gegenteil fördert es Fehler. Möglichst spät initialisieren dagegen führt im Zweifel beim Kompilieren zu Fehlern, wenn man die Variable ungewollt nutz.
Hättest du mal 5 Sekunden nachgedacht, würdest du das vielleicht auch merken.


----------



## mrBrown (26. Jun 2019)

Meniskusschaden hat gesagt.:


> Es geht ja um die Kombination. Ich würde sagen es soll bedeuten, Deklaration und Initialisierung möglichst nahe zueinander zu legen und das Ganze in einen möglichst kurzen (notfalls zusätzlichen) Block zu packen.


Wenn der Scope minimal ist, führt Gültigkeitsbereich maximieren immer zu einer unnötig frühen Initialisierung, sonst ließe sich schon der Scope kleiner wählen - und produziert damit wieder mehr Fehlerquellen.

(Die Fälle, in denen das überhaupt möglich ist, sind aber eh minimal)


----------



## Xyz1 (26. Jun 2019)

Einfach nur Nein, was du beschreibst ist ein Unding aus C Zeiten...


----------



## mrBrown (26. Jun 2019)

Tobias-nrw hat gesagt.:


> Einfach nur Nein, was du beschreibst ist ein Unding aus C Zeiten...


Okay, gibts zu, du hast keine Ahnung was mit „Scope minimieren“ überhaupt gemeint ist?

Gültigkeitsbereich maximieren ist Btw wirklich ein C-Ding, der kann da nämlich nicht kleiner sein als der Scope


----------



## kneitzel (26. Jun 2019)

Wenn ich den Sichtbarkeitsbereich minimiere, dann impliziert dies doch, dass der Bereich, in dem die Variable auch einen gültigen Wert hat, maximiert ist. 
Denn Sichtbarkeitsbereich minimiert bedeutet doch, dass zeitnah nach der Deklarierung auch die Initialisierung erfolgt. Sollten erst andere Befehle kommen, dann würde es ja implizieren, dass der Sichtbarkeitsbereich noch nicht minimal ist.

Und die Aussage, dass eine Initialisierung zeitnah erfolgen soll würde ich so alleine nicht stehen lassen, denn da könnte sonst jemand ein Best Practice draus ableiten, dass man lokale Variablen einfach immer mit 0 initialisert wie es z.B. bei Felder ja schon der Fall ist. Dann hat man aber nicht mehr die Unterstützung des Compilers, der prüft, dass die Variable erst initialisiert wurde ....


----------



## mrBrown (26. Jun 2019)

Um mal ein Beispiel zu bringen, angefangen mit diesem Code:

```
private void foo() {
  final int a;
  ...
  if (x) {
    a = 1;
  } else {
    a = 2;
  }
  ...
}
```
Als 


*Stumpfes Gültigkeitsbereich maximieren*:


```
private void foo() {
  int a = 2;
  ...
  if (x) {
    a = 1;
  }
  ...
}
```

Hilft nicht, Scope bleibt maximal, Deklaration und Verwendung ist getrennt, zusätzlich wird die Zuweisung im if nicht geprüft und die Variable ist nicht final.


*Stumpfes Scope minimieren*:


```
private void foo() {
  ...
  final int a;
  if (x) {
    a = 1;
  } else {
    a = 2;
  }
  ...
}
```
Scope ist jetzt minimal, Compiler checkt die Zuweisungen, Deklaration steht bei der ersten Verwendung. Gültigkeitsbereich ist aber nicht Maximal, der ließe sich noch auf die Zeile der Deklaration aufweiten.

*Scope minimieren & Gültigkeitsbereich maximieren* 


```
private void foo() {
  ...
  int a = 2;
  if (x) {
    a = 1;
  }
  ...
}
```

Scope ist minimal, Gültigkeit maximal, aber: Compiler prüft zweite Zuweisung nicht & Variable kann nicht final sein = mögliche Fehlerquellen, die es ohne maximalen Gültigkeitsbereich nicht gab.


Und als letzte Variante, *Scope minimieren und Refaktorieren*:


```
private void foo() {
  ...
  final int a = getA(x);
  ... 
}
private int getA(... x) {
  if (x) {
    return 1;
  } else {
  return 2; 
}
```
Minimaler Scope, minimale Gültigkeit, alles vom Compiler gecheckt.



finalNutzung nah bei DeklarierungCompilerprüfungkleiner ScopeUrsprünglich JaNeinJaNeinminimaler ScopeJaJaJaJamaximaler GültigkeitsbereichNeinNeinNeinNeinScope und GültigkeitsbereichNeinJaNeinJarefactoredJaJaJaJa


----------



## Xyz1 (26. Jun 2019)

kneitzel hat gesagt.:


> Denn Sichtbarkeitsbereich minimiert bedeutet doch, dass zeitnah nach der Deklarierung auch die Initialisierung erfolgt.


Nein, eine Variable erst spät deklarieren


kneitzel hat gesagt.:


> Wenn ich den Sichtbarkeitsbereich minimiere, dann impliziert dies doch, dass der Bereich, in dem die Variable auch einen gültigen Wert hat, maximiert ist


Nein, es gibt auch Sichtbarkeitsbereiche, die Du nicht minimieren kannst



mrBrown hat gesagt.:


> Okay, gibts zu, du hast keine Ahnung was mit „Scope minimieren“ überhaupt gemeint ist


Psychologisch nennt man das Transfer... eigene "Unzulänglichkeiten" auf andere...

So viel von mir... ich beteilige mich nicht mehr am Thema.


----------



## mrBrown (26. Jun 2019)

Tobias-nrw hat gesagt.:


> Nein, es gibt auch Sichtbarkeitsbereiche, die Du nicht minimieren kannst


Zum Beispiel?




Tobias-nrw hat gesagt.:


> So viel von mir... ich beteilige mich nicht mehr am Thema.


Also wie üblich, Unruhe stiften und schnell verschwinden


----------



## kneitzel (26. Jun 2019)

Also noch einmal in etwas anderen Worten, damit auch @Tobias-nrw es versteht:

Eine Konsequenz / Folge der Minimierung der Sichtbarkeit ist, dass eine Variable zeitnah nach der Deklaration auch initialisiert wird.Wenn zwischen der Deklaration und der Initialisierung andere Befehle sind, dann könnte man diese Befehle ja vor die Deklaration der Variablen verschieben und so die Sichtbarkeit verringern.

Ein Fall, in dem Du den Sichtbarkeitsbereich nicht verringern kannst aber den Bereich, in dem die Variable einen definierten Wert hat, erhöhen kannst, dann hast Du lediglich eine Initialisierung ohne wirklichen Sinn..... Das sind die Fälle, die @mrBrown ja sehr schön aufgezeigt hat und die dazu führen, dass die Unterstützung des Compilers für mögliche Fehler bezüglich nicht Initialisierung verloren geht....

Aber was auch sehr schön von ihm aufgezeigt wurde: Im Bereich Clean Code ist der Vorschlag von @Tobias-nrw unnötig, denn das Resultat sollte wenn dann ein entsprechendes Refactoring sein, das ja auch sehr schön verdeutlicht wurde.


----------



## Xyz1 (26. Jun 2019)

mrBrown hat gesagt.:


> Beispiel?


nicht lokale Deklarationen



mrBrown hat gesagt.:


> Also wie üblich, Unruhe stiften und schnell verschwinden


Ja, das ist das einzig richtig, was ein normal denkender Mensch tun kann, wenn keine Argumentation mehr greift.

Ihr kennt die Fachbegriffe nicht, demzufolge sind sie für euch falsch... Dann seis so.


----------



## mrBrown (26. Jun 2019)

Tobias-nrw hat gesagt.:


> Nein, es gibt auch Sichtbarkeitsbereiche, die Du nicht minimieren kannst


Beispiel?


Tobias-nrw hat gesagt.:


> nicht lokale Deklarationen


also Instanz-/Klassenvariablen?

Oder meinst du was anderes, falls ja, zeig mal ein richtiges Beispiel.




Tobias-nrw hat gesagt.:


> Ja, das ist das einzig richtig, was ein normal denkender Mensch tun kann, wenn keine Argumentation mehr greift.
> 
> Ihr kennt die Fachbegriffe nicht, demzufolge sind sie für euch falsch... Dann seis so.


Ich glaube ja an das gute im menschen und kann mir nicht vorstellen, dass du da absichtlich machst - aber, hast du dir diesen Thread auch mal durchgelesen?

Auf der einen Seite stehe ellenlange Texte mit Erklärungen und Beispielen, auf der anderen halbe Sätze und unterschwellige Beleidigungen.
Du bist dabei nicht auf der Seite mit langen Texten...


Du bist btw der, der „Gültigkeitsbereich“ eingeführt hat, was hier in diesen Thread der „Fachbegriff“ mit am wenigsten definierter Bedeutung sein dürfte.
Dem gegenüber steht „Scope“, was in der JLS definiert ist, und was niemand anders als in der Definition verwendet.


----------



## kneitzel (27. Jun 2019)

@mrBrown So langsam sollten wir gelernt haben, wie wir ihn nehmen müssen.


----------



## Der Wissende (27. Jun 2019)

Tobias-nrw hat gesagt.:


> ```
> int i;
> //500 Zeilen...
> i = 5;
> ...



Den einzigen Fachbegriff, den ich für sowas kenne, ist einfach "beschissener Code". Wenn eine lokale Variable über 500 Zeilen verwendet wird, dann geändert, und dann weiter verwendet wird, bedeutet ja, dass die Methode rießig ist. Und jetzt komm nicht wieder mit irgendwelchen Performanztheorien. In Java spielt es eine rießige Rolle, was der JIT macht und große Methoden können deutlich schlechter optimiert werden, als kurze. Da fällt es nicht ins Gewicht, ob du nun nur eine Variable nutzt und diese dann immer wieder anders verwendest anstatt 10 Variablen in kurzen Methoden.


----------



## mrBrown (27. Jun 2019)

Lustig, dass Namen nach Namensänderungen neu vergeben werden


----------



## thecain (27. Jun 2019)

Da ist ein Space mehr


----------



## Xyz1 (27. Jun 2019)

Der Wissende hat gesagt.:


> Den einzigen Fachbegriff, den ich für sowas kenne, ist einfach "beschissener Code".


Man könnte auch sagen, Du hast keine Ahnung...



Der Wissende hat gesagt.:


> Wenn eine lokale Variable über 500 Zeilen verwendet wird


Erster Fehler, diese Variable kann nicht über 500 Zeilen verwendet werden...

Den Rest des Gesülzes lese ich mir nicht weiter durch.




mrBrown hat gesagt.:


> Lustig, dass Namen nach Namensänderungen neu vergeben werden


Er sollte sich ein anderes Hobby suchen...


----------



## mihe7 (27. Jun 2019)

Tobias-nrw hat gesagt.:


> Er sollte sich ein anderes Hobby suchen...


Es kann nur einen geben.


----------



## mrBrown (27. Jun 2019)

Tobias-nrw hat gesagt.:


> Erster Fehler, diese Variable kann nicht über 500 Zeilen verwendet werden...


Also laut dir: 


Tobias-nrw hat gesagt.:


> ```
> int i;
> //500 Zeilen...
> i = 5;
> ...


Ist der Gültigkeitsbereich 500 Zeilen lang...oder willst du uns jetzt sagen, dass die Variable gar nicht im gesamten Gültigkeitsbereich verwendet werden kann?


----------



## mrBrown (27. Jun 2019)

thecain hat gesagt.:


> Da ist ein Space mehr


Mist, wirklich :O ich hätte nicht erwartet, das Leerzeichen im Namen gültig sind


----------



## Der Wissende (27. Jun 2019)

Tobias-nrw hat gesagt.:


> Man könnte auch sagen, Du hast keine Ahnung...


Sorry bin  noch Troll in Ausbildung.... Hoffe ich kann von dir noch viel lernen



Tobias-nrw hat gesagt.:


> Erster Fehler, diese Variable kann nicht über 500 Zeilen verwendet werden...


Danke für den Input, erstmal unhaltbare Behauptungen aufstellen



Tobias-nrw hat gesagt.:


> Den Rest des Gesülzes lese ich mir nicht weiter durch.


Dann einfach mal die Diskussion ohne Argumente beenden ...



Tobias-nrw hat gesagt.:


> Er sollte sich ein anderes Hobby suchen...


Ne ich find Trolle trollen ein ziemlich reizvolles Hobby ZwinkerSmiley


----------



## Xyz1 (27. Jun 2019)

Der Wissende hat gesagt.:


> Danke für den Input, erstmal unhaltbare Behauptungen aufstellen


Du merkst doch selber, dass du keine Ahnung von Java hast... Aber Du kannst natürlich gerne versuchen, eine uninitialisierte Variable zu verwenden...


----------



## Xyz1 (27. Jun 2019)

mrBrown hat gesagt.:


> Ist der Gültigkeitsbereich 500 Zeilen lang


Der Gültigkeitsbereich ist die zweiten 500 Zeilen lang...

Muss ich das jetzt alles nochmal ausrollen? Nö.


----------



## mihe7 (27. Jun 2019)

Wann ist eigentlich Welt-Troll-Tag?


----------



## Xyz1 (27. Jun 2019)

mihe7 hat gesagt.:


> Wann ist eigentlich Welt-Troll-Tag?


Ist doch wahr, kommt um die Ecke, verwendet meinen Nickname und stellt hirnverbrannte Behauptungen auf... Na danke.


----------



## Der Wissende (27. Jun 2019)

Tobias-nrw hat gesagt.:


> Du merkst doch selber, dass du keine Ahnung von Java hast... Aber Du kannst natürlich gerne versuchen, eine uninitialisierte Variable zu verwenden...


Du merkst doch selber, dass du nicht lesen kannst. Ich hab gesagt, dass eine Methode mit 1000 Lines of Code "beschissener Code" ist. 

Eine Variable ist ab den Zeitpunkt gültig ab dem du sie deklariert hast, das du darauf nicht lesend zugreifen darfst, davor beschützt dich der Compiler, aber sie ist gültig ein Indiz dafür ist, dass du sie kein zweites mal deklarieren darfst. Wenn du also sagst, dass der Gültigkeitsbereich maximiert werden soll, dann ist dein Beispiel dafür oben genau das was ich darunter verstehe Gültigkeitsbereich = Der Compiler kennt die Variable. 

Was du vielleicht meinst, ist, dass die Initialisierung so nah wie möglich bei der Deklarierung erfolgen sollte. Was dann aber wieder maximiert bedeuten soll, weiß ich nicht... Vielleicht doch die 500 Line of "beschissener Code" danach... ZwinkerSmiley


----------



## mihe7 (27. Jun 2019)

Jetzt muss ich mir doch noch was zum Knabbern holen...


----------



## Xyz1 (27. Jun 2019)

Der Wissende hat gesagt.:


> [blabla]
> Wenn du also sagst, dass der Gültigkeitsbereich maximiert werden soll, dann ist dein Beispiel dafür oben genau das was ich darunter verstehe Gültigkeitsbereich = Der Compiler kennt die Variable.


Das war eine Veranschaulichung, um den Unterschied zwischen Sichtbarkeitsbereich und Gültikeitsbereich zu erklären. Nicht mehr, nicht weniger. Vor welche Wand bist Du heute gelaufen?


----------



## Xyz1 (27. Jun 2019)

mihe7 hat gesagt.:


> Jetzt muss ich mir doch noch was zum Knabbern holen...


Im Moment schlafe ich aufgrund geistiger Unterforderung gerade ein. Aber Du kannst mir natürlich gern welche abgeben.


----------



## mihe7 (27. Jun 2019)

Hab nur noch Chili Croutons gefunden.


----------



## Der Wissende (27. Jun 2019)

CB hat gesagt.:


> Das war eine Veranschaulichung, um den Unterschied zwischen Sichtbarkeitsbereich und Gültikeitsbereich zu erklären. Nicht mehr, nicht weniger. Vor welche Wand bist Du heute gelaufen?


Wow bist du toll, du definierst hier lustig Sachen und willst damit recht haben. Da du es ja eh nur wieder mit blabla und nicht gelesen machst nur kurz.... Sichbarkeitsbereich ist was gaaaaaanz anderes (private, public und so) hier geht es um scope vs Gültigkeitsbereich.... Das ist ungefähr so, als würden wir über car und Auto reden... wobei Auto bei dir 5 Räder hat und mit den Füßen angetrieben wird.


----------



## mihe7 (27. Jun 2019)

Wofür steht denn CB?


----------



## mrBrown (27. Jun 2019)

mihe7 hat gesagt.:


> Wofür steht denn CB?


Einer seiner 27 Nicknames?


----------



## Der Wissende (27. Jun 2019)

mihe7 hat gesagt.:


> Wofür steht denn CB?


Oh sorry hab mich vertan. Es gibt da ein anderes deutschsprachiges Entwicklerforum, wo wir jemanden haben, der eine ähnliche Diskussionskultur wie @Tobias-nrw hat und darauf besteht, dass wir statt dem vollen Namen cyborgBeta ihn nur mit CB zitieren und erwähnen. Macht der Gewohnheit, wird nicht mehr vorkommen.


----------



## mrBrown (27. Jun 2019)

Der Wissende hat gesagt.:


> ähnliche Diskussionskultur


"ähnlich"...


----------



## Xyz1 (27. Jun 2019)

Wer ist wir? Wer ist CB? Was bist Du?  Eine Darbietung der Lächerlichkeit kaum zu überbieten würde ich mal sagen.


----------



## Xyz1 (27. Jun 2019)

Der Wissende hat gesagt.:


> Wow bist du toll, du definierst hier lustig Sachen und willst damit recht haben


Ich will mich nur vor solcher gefährlichen Dummheit schützen.


----------



## Der Wissende (27. Jun 2019)

Tobias-nrw hat gesagt.:


> Wer ist wir? Wer ist CB? Was bist Du?  Eine Darbietung der Lächerlichkeit kaum zu überbieten würde ich mal sagen.





Tobias-nrw hat gesagt.:


> Ich will mich nur vor solcher gefährlichen Dummheit schützen.


Meinst du wirklich mich würden Beleidigungen von dir, der seit Jahren einfach nur trollt, treffen? Mir ist das doch total egal was du von mir denkst. 
Was an deinem "Hobby" nur doof ist, dass du Leuten, die hier Hilfe suchen, Blödsinn erzählst. Ich unterstell dir einfach mal, dass du das absichtlich tust... Alles andere wäre einfach nur dumm. Du kannst doch nicht ernsthaft Behauptungen in den Raum werfen, die sonst nirgendwo stehen, und dann mit Beleidigungen verteidigen. Das macht doch niemand, der nicht einfach nur Spaß dran hat.


----------



## mihe7 (27. Jun 2019)

Der Wissende hat gesagt.:


> darauf besteht, dass wir statt dem vollen Namen cyborgBeta ihn nur mit CB zitieren und erwähnen


 LOL


----------



## Xyz1 (28. Jun 2019)

@mrBrown Entferne alles ab #29 mal und verschiebe die Diskussion in Sonstiges/Plauderecke. Beleidigungen müssen nicht im On-topic stehen...


----------



## kneitzel (28. Jun 2019)

Also das Du (@Tobias-nrw) immer noch an deinem Gültigkeitsbereich so festhältst ist schon erstaunlich. Du hast die Hinweise zur JLS nicht einmal wahrgenommen oder warst du nur nicht in der Lage, sie zu verstehen.

Und natürlich kann die Variable auch in den 500 Zeilen vorher verwendet werden, jedoch vor der ersten Zuweisung nicht lesend.

Unterschied ungültige Variable und Variable enthält keinen definierten Wert hast du auch noch nicht verstanden...

Und dann hier so aufzutreten ... Das würde ich ja normalerweise als Witz auffassen, aber du meinst das wirklich ernst!

Fakten ignorieren, nie Argumente bringen und sich für gut halten .... Bei einer Methode mit über 1000 Zeilen Code  Und wir haben bei Clean Code versucht, hier eine Grenze zu definieren 
Zumal der Einwand mit der langen Methode einfach zu lösen gewesen wäre mit einem einfachen Hinweis, dass man nur die Bereiche aufzeigen wollte und die Größe der Bereiche keine Rolle spielt ....aber das erfordert wohl einen gefestigten Charakter, der bei einem Widerspruch sachlich reagieren kann....

Aber Höhepunkt war, anderen vorzuwerfen, kein Java zu können... Wo Du außerhalb der JLS bist mit Deiner Position ...


----------



## Xyz1 (28. Jun 2019)

kneitzel hat gesagt.:


> Fakten ignorieren, nie Argumente bringen und sich für gut halten .... Bei einer Methode mit über 1000 Zeilen Code





Tobias-nrw hat gesagt.:


> Das war eine Veranschaulichung, um den Unterschied zwischen Sichtbarkeitsbereich und Gültikeitsbereich zu erklären. Nicht mehr, nicht weniger


@kneitzel Deine Beiträge sind auch dumm.


----------



## kneitzel (28. Jun 2019)

Der Wissende hat gesagt.:


> Diskussionskultur wie @Tobias-nrw



Das würde schon erläutert. Das liegt einfach nur daran, dass @Tobias-nrw immer Recht hat. Wir haben immer Unrecht. Nur @mrBrown (oder war es @mihe7?) hat etwas weniger Unrecht und wird daher etwas akzeptiert... 



Tobias-nrw hat gesagt.:


> @kneitzel Deine Beiträge sind auch dumm.


Ja, danke. Keine Argumente, nur eine reine These. Somit wieder ein gutes Beispiel, wie du hier ohne Argumente um die Ecke kommst. Andere Beispiele findest Du in unzähligen Threads mit Dir, wo nach Argumenten für eine These von Dir gefragt wurde und von Dir nie etwas gekommen ist.


----------



## Xyz1 (28. Jun 2019)

Ja, was soll ich dazu noch schreiben? Mir vorwerfen, ich hätte, den Abschnitt in der JLS nicht gelesen, aber selber einfachste Beiträge nicht verstehen... Wenn Du anderer Meinung bist, dann versuche doch nicht erst, zu antworten.
Langsam frage ich mich auch, wie du zu Deiner IT-Ausbildung gekommen bist... Vermutbar wäre, dass zu der damaligen Zeit Abschlüsse einfach verschenkt wurden. Ob jemand lern- und kritikfähig gewesen ist, spielte dabei wohl eine nebensächliche Rolle.
und nochmals... Deine jetzige Position interessiert mich nicht so viel.


----------



## Der Wissende (28. Jun 2019)

Das lustige hier ist ja, das @Tobias-nrw ja eigentlich recht hat, wenn er meinen würde, dass man eine Variable so nah wie möglich bei der Deklaration auch initialisieren sollte. Aber er besteht halt einfach darauf, dass dieser Sachverhalt als "maximierung des Gültigkeitsbereich" bezeichnet wird. Was halt einfach nicht richtig ist, weil Gültigkeitsbreich ist das deutsche Wort für Scope und das meint nunmal was anderes.  



Tobias-nrw hat gesagt.:


> Ja, was soll ich dazu noch schreiben?



Beispielsweise könntest du jetzt schreiben: "Okay wir sind uns ja prinzipell einig, dass man eine Variable so nah wie möglich an der Deklaration initialisieren sollte. Ich hab mich nur etwas ungeschickt ausgedrückt"

Aber solange du einfach nur allen anderen Unfähigkeit unterstellst, dass sie von Java keine Ahnung haben und ihre IT-Ausbildung geschenkt bekommen haben, bleibst du für mich einfach nur ein Troll.


----------



## kneitzel (28. Jun 2019)

Und wieder nichts wirklich konkretes:
a) welchen Beitrag habe ich deiner Meinung nach nicht verstanden?
b) Wenn Du schlicht Quatsch schreibst, der mit der JLS nicht in Einklang zu bringen ist, dann werde ich das gerne schreiben. Nicht für Dich - Du beweist ständig, dass Du sowas generell nicht zur Kenntnis nimmst - aber es gibt tatsächlich andere, die das durchaus interessieren könnte.
c) Dein Hinweis bezüglich meine IT Ausbildung zeigt wieder: Du hast keine Argumente und versucht auf eine plumpe Art und Weise die Person anzugehen. Halt so erbärmlich wie Dein ganzes Auftreten hier...



Der Wissende hat gesagt.:


> Das lustige hier ist ja, das @Tobias-nrw ja eigentlich recht hat, wenn er meinen würde, dass man eine Variable so nah wie möglich bei der Deklaration auch initialisieren sollte. Aber er besteht halt einfach darauf, dass dieser Sachverhalt als "maximierung des Gültigkeitsbereich" bezeichnet wird. Was halt einfach nicht richtig ist, weil Gültigkeitsbreich ist das deutsche Wort für Scope und das meint nunmal was anderes.



Ja, wobei er ja auch (mehr oder weniger schön) erläutert hat, was er darunter versteht.

Das sind alles Nichtigkeiten, die mit einer einfachen kleinen Aussage aus der Welt zu schaffen sind. Dass da dann sogar die JLS bemüht werden muss und er das dann immer noch nicht einsieht ... und dann das Wort auch weiter in rein seinem Sinne verwendet, das ist etwas unverständlich ...

Fehler passieren. Verwechsle mrbrown und mihe7 (Wer im Thread etwas geschrieben hat): Schade aber auch. Die entsprechenden Kommentare sind gekommen  Oder richtig peinlich: Meine "else schleife" ... Das konnte ich selbst erst nicht glauben, dass ich das geschrieben hatte... Oder ein Vertauschen von links und rechts ... 
Foren-Beiträge sind in der Regel keine wissenschaftlichen Ausarbeitungen und werden relativ schnell geschrieben. Und passiert ist passiert. Da kommt dann - so die Richtigstellung klar war - evtl. ein Spruch "Ich glaub ich muss in Rente gehen" oder so ... Oder man schreibt da noch kurz etwas dazu... Ist in meinen Augen alles nichts Schlimmes (aber etwas peinlich ist es mir schon).

Da ist halt die Frage, ob und wie man zu seinen Fehlern stehen kann....


----------



## mihe7 (28. Jun 2019)

kneitzel hat gesagt.:


> Fehler passieren.


Gott sei Dank, sonst wäre es ja langweilig. 



kneitzel hat gesagt.:


> Die entsprechenden Kommentare sind gekommen


Ein bisschen Spaß muss sein. 



kneitzel hat gesagt.:


> Oder richtig peinlich: Meine "else schleife" ... Das konnte ich selbst erst nicht glauben, dass ich das geschrieben hatte... Oder ein Vertauschen von links und rechts ...


Gut, dass Du mich an die links-rechts-Geschichte erinnerst, die hätte ich doch glatt vergessen  

Aber mal ernsthaft:  mein Gott, das sind Tippfehler oder man hat mal einen gedanklichen Dreher oder ist geistig nicht auf der Höhe. Dann legt man kleine und größere Eier. Die nagen an einem selber mehr als es andere stört. Und wenn ich fachlich daneben liege oder es bessere Ansätze gibt, bin ich froh, darauf hingewiesen zu werden. Da waren schon einige Dinge dabei.

Auf jeden Fall finde ich es gut, wenn man sich gegenseitig ein bisschen aufziehen kann. Und zur Not gilt ja immer noch: @Robat (aufgrund gelegter Eier wahlweise auch @mihe7) hats versaut, wie ein neu angemeldetes Mitglied in seinem ersten Kommentar seinerzeit feststellte...


----------



## Meniskusschaden (28. Jun 2019)

So richtig sachlich geht es in diesem Thread ja nicht zu. Aber so einseitig wie es hier rüber kommt, sehe ich es nicht. Das hier waren die drei ersten Posts von @Tobias-nrw:


Tobias-nrw hat gesagt.:


> Dafür gibt es einen Algorithmus für: https://en.wikipedia.org/wiki/Bresenham's_line_algorithm . Pseudocode und Grafiken sind auch dabei. Ich kann Dir, wenn Du willst das später mal ausprogrammieren.





Tobias-nrw hat gesagt.:


> Und den Gültigkeitsbereich solcher Variablen möglichst maximieren





Tobias-nrw hat gesagt.:


> temi hat gesagt.:
> 
> 
> > Ich war immer der Meinung, das beides dasselbe meint?
> ...


Daraufhin hat er einen Trollvorwurf kassiert. Warum? Er hat doch eine ganz normale Ansicht geäußert, die man haben darf und nach Rückfrage des unklaren Begriffs sofort dargelegt, was er damit meint. Man soillte nicht ganz aus den Augen verlieren, dass er hier provoziert wurde - auch wenn ich vermute, dass das keine vorsätzliche Provokation war, sondern nur eine Fehldeutung seines Postings.

Wenn ein Begriff falsch oder vermeintlich falsch verwendet wird, gibt es ein paar Möglichkeiten, konstruktiv damit umzugehen: man nennt den korrekten Begriff, schlägt einen weniger mißverständlichen vor oder akzeptiert für die Dauer des Threads die abweichende Definition. Ich finde, der sehr gute Beitrag #23 von @mrBrown zeigt auch, dass für diesen Thread ein Begriff gebraucht wurde. Er zeigt auch, dass es sich lohnt über dieses Thema mal nachzudenken und verleiht der Ursprungsthese von @Tobias-nrw dadurch ihren Sinn und ihre Berechtigung.

Die Diskussion zur Begriffsbildung fand ich etwas kleinlich. Wer hat denn hier überhaupt die Hoheit über die Begriffsdefinition? Zunächst die JLS. Aber die ist nun mal auf englisch. Zu den deutschen Begriffen sagt sie logischerweise nichts und ein Wörterbuch hilft in diesem Fall tatsächlich nur sehr bedingt weiter, denn der Begriff scope ist ja sehr allgemein gehalten. Ein Wörterbuch spuckt da eben auch deutlich spezifischere Nebenbedeutungen aus. Da müsste man dann ja fast schon sämtliche deutschen Begriffe blockieren, die auf "bereich" enden.
Es ist ja ein sehr praktischer Vorteil der deutschen Sprache, dass sie zusammengesetzte Substantive erlaubt, während man im englischen mit "scope of ..." arbeiten muss. Deshalb könnte man auch argumentieren, dass es eigentlich nicht richtig ist, aus der JLS nur den isolierten Begriff "scope" zu übersetzen, sondern dass man stattdessen "scope of ... declaration" übersetzen müsste, was wohl Deklarationsbereich ergeben würde.

Wer legt den deutschen Begriff also fest? Ich denke, weder JLS noch Wörterbuch, sondern es setzt sich der Begriff durch, der in der Entwicklergemeinde und Literatur am häufigsten verwendet wird. Das wäre meines Erachtens tatsächlich "Gültigkeitsbereich". Dennoch wäre es für das, was @Tobias-nrw sagen wollte ein sehr passender Begriff gewesen und jeder hat die Freiheit eigene Definitionen einzubringen, was @Tobias-nrw in einer Phase getan hat, als noch alles sachlich zuging.

Mit dem Beitrag #23 von @mrBrown war eigentlich ein guter Abschluss oder eine Basis für eine sachliche Fortführung gegeben. Schade, dass es jetzt immer noch so destruktiv weiter geht.


----------



## Robat (28. Jun 2019)

mihe7 hat gesagt.:


> Und zur Not gilt ja immer noch: @Robat ([...]) hats versaut, wie ein neu angemeldetes Mitglied in seinem ersten Kommentar seinerzeit feststellte...


Ich geb es ja zu ... ich war es


----------



## Xyz1 (28. Jun 2019)

Es wird leider unsachlich weitergehen... Aber solange das nicht in Tätlichkeiten umschlägt ("dem hau ich aufs Auge"), bin ich schon zufrieden. Ich danke Dir @Meniskusschaden . und hoffe... das Popcorn ist jetzt aufgebraucht.


----------



## L0oNY (28. Jun 2019)

Tobias-nrw hat gesagt.:


> Langsam frage ich mich auch, wie du zu Deiner IT-Ausbildung gekommen bist...


Also falls es jemanden interessieren sollte, ich musste immer mit dem Zug zur Uni fahren, das war manchmal ein ganz schöner Krampf


----------



## kneitzel (28. Jun 2019)

Meniskusschaden hat gesagt.:


> Wer legt den deutschen Begriff also fest? Ich denke, weder JLS noch Wörterbuch, sondern es setzt sich der Begriff durch, der in der Entwicklergemeinde und Literatur am häufigsten verwendet wird. Das wäre meines Erachtens tatsächlich "Gültigkeitsbereich". Dennoch wäre es für das, was @Tobias-nrw sagen wollte ein sehr passender Begriff gewesen und jeder hat die Freiheit eigene Definitionen einzubringen, was @Tobias-nrw in einer Phase getan hat, als noch alles sachlich zuging.



Also ich stimme Dir zu, dass die englische JLS für deutsche Begriffe nur bedingt tauglich ist. Nicht alles wird sich 1:1 übersetzen lassen und bei Begriffen ist tatsächlich wichtig, was in der Entwicklergemeinde und der Literatur verwendet wird.

Dann schauen wir doch einfach einmal in die Literatur. "Java ist auch eine Insel" verwendet den Begriff z.B.:
http://openbook.rheinwerk-verlag.de...02_004.htm#mj47f0fa7692df8df688cd6a8a6cf9fefd
(Andere Bücher habe ich so auf Anhieb nicht online im Zugriff. Ich selbst beschränke mich bei meinen Büchern auf englische Fachliteratur)

Es wurde aber auch Hochschule erwähnt (Universitäter Bereich), also könnte man einmal schauen, wie dies den an Hochschulen gehandhabt wird (Da wird dann ja auch Java verwendet und da kann man ja mal schauen, was die hier im Zusammenhang mit Java verwenden):
http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/gueltigkeitsbereiche_java
https://www.math.uni-bielefeld.de/~frettloe/teach/alte-vorles/ueb/Java_Tag2_handout.pdf

Aber man kann es auch geschichtlich betrachten. Wenn man dann z.B. Sprachen betrachtet, die es vorab gab und noch gibt, dann kann man z.B. bei C / C++ schauen.... Da ist es prinzipiell gleich, nur eben gibt es diese Prüfung und eine Variable mit undefinierten Wert kann gelesen werden. Klar: Java ist nicht C / C++. Aber ist das ein reiner C / C++ Begriff oder ist es evtl. eine allgemeinere Sache?

Dazu schauen wir mal, was denn die Leute auf Wikipedia so sagen: Da hat "Gültigkeitsbereich" gar keinen eigenen Eintrag. Man kann es aber etwas finden:
https://de.wikipedia.org/wiki/Gültigkeit
Da wird das Thema auch beleuchtet und da gibt es dann sogar eine Aussage "Eine sichtbare Variable ist immer gültig."
(==> ungültige Variable vs. Variable mit undefiniertem Wert!)

Interessant:
https://de.wikipedia.org/wiki/Variable_(Programmierung)
Hier gibt es einen Block zur Sichtbarkeit und da taucht dann der Begriff Gültigkeitsbereich plötzlich einmal auf. Da wird es wohl versehentlich als Synonym für den Sichtbarkeitsbereich verwendet, weil da auch ein Beispiel gebracht wird und dort von Gültigkeitsbereich gesprochen wird.

Also das Thema ist durchaus komplex. Und ich habe mir da auch durchaus viele Gedanken gemacht. Alleine schon die Recherchen, die ich anstelle, nur weil da jemand meint, einen Begriff falsch verwenden zu müssen... Die Recherchen sind meinen Postings doch auch klar erkennbar. Und solche Recherchen als Provokation zu sehen ist für mich nicht nachvollziehbar.

Die Schlüsse, die ich ziehe, mögen durchaus kritisch zu sehen sein. Das mit der Übersetzung beinhaltet tatsächlich gewisse Problematiken. Aber JLS ist die Grundlage von Java. Und wenn wir Unterscheidungen haben wollen, dann ist doch die Frage: taucht das da auch auf? Haben wir da einen Sichtbarkeitsbereich und einen Gültigkeitsbereich? Ist da eine Variable ungültig obwohl sichtbar? Und sowas konnte ich nicht finden. Aber evtl gibt es diese Unterscheidung ja im Englischen? Da kannst Du uns ja erhellen?

Und einen Punkt, den ich nur teilweise angesprochen habe: Was macht diese Unterscheidung für einen Sinn? Muss man da so unterscheiden? Müssen wir also einen Begriff finden (Gültigkeitsbereich aber bitte nicht, der Begriff ist vergeben!)? Aber das will ich jetzt nicht auch noch ausführen. Ich habe hier jetzt genug Zeit investiert. (Und nein, das Spielchen, dass ich mich von euch ständig so triggern lasse, funktioniert nicht. Das Spielchen ist auch zu leicht zu durchschauen, wenn man es denn kennt.)


----------



## Xyz1 (28. Jun 2019)

kneitzel hat gesagt.:


> Alleine schon die Recherchen, die ich anstelle, nur weil da jemand meint, einen Begriff falsch verwenden zu müssen...


Und schon geht es semi unsachlich weiter...


----------



## Meniskusschaden (28. Jun 2019)

@kneitzel: Zu den ganzen Belegen zur üblichen Auslegung des Begriffs "Gültigkeitsbereich": Die wären - zumindest meinetwegen - nicht notwendig gewesen. Ich hatte ja schon in meinem vorigen Beitrag geschrieben, dass ich das auch als die übliche Definition ansehe. Ich weiß gar nicht, ob das überhaupt noch strittig ist.



kneitzel hat gesagt.:


> Die Recherchen sind meinen Postings doch auch klar erkennbar. Und solche Recherchen als Provokation zu sehen ist für mich nicht nachvollziehbar.


In meinem Abschnitt über die Provokation ging es um den Troll-Vorwurf. Der kam nicht von dir.



kneitzel hat gesagt.:


> Und einen Punkt, den ich nur teilweise angesprochen habe: Was macht diese Unterscheidung für einen Sinn? Muss man da so unterscheiden?


Ich verweise noch mal auf Beitrag #23 von @mrBrown. Der wäre ohne (begriffliche) Unterscheidung bestimmt viel umständlicher ausgefallen und ist doch sehr aufschlussreich geworden. Also ja: wenn man darüber sprechen möchte, ist die Unterscheidung sinnvoll.



kneitzel hat gesagt.:


> Müssen wir also einen Begriff finden (Gültigkeitsbereich aber bitte nicht, der Begriff ist vergeben!)?


Jeder hat die Freiheit, einen besseren Begriff in den Ring zu werfen. Niemand hat es getan. Und hier:


kneitzel hat gesagt.:


> Wenn man nun spezieller Begriffe nutzen möchte, dann sollten diese klar definiert werden vor der Nutzung. Ansonsten gehen wir von den üblichen Wörtern aus wie sie z.B. bei Wikipedia definiert sind.


hast du ja treffend beschrieben, wie es mit Begriffsnutzungen läuft. Nur dass das "Ansonsten ..." eben nicht zutrifft, weil @Tobias-nrw ja eine Definition geliefert hat.



kneitzel hat gesagt.:


> Und nein, das Spielchen, dass ich mich von euch ständig so triggern lasse, funktioniert nicht. Das Spielchen ist auch zu leicht zu durchschauen, wenn man es denn kennt.


Falls dieses "euch" mich einschließen soll, weiß ich nicht, was du damit meinst.


----------



## kneitzel (28. Jun 2019)

Meniskusschaden hat gesagt.:


> hast du ja treffend beschrieben, wie es mit Begriffsnutzungen läuft. Nur dass das "Ansonsten ..." eben nicht zutrifft, weil @Tobias-nrw ja eine Definition geliefert hat.



Er hat eine Definition geliefert?

Also erst einmal hat er den Begriff ohne Definition benutzt (#2). #4 enthält keine klare Definition. Es ist ein Beispiel, welches noch nicht einmal eindeutig ist. Welche 500 Zeilen sind denn nun der Gültigkeitsbereich? 

In #7 reagiert er auf die Nachfrage, aber sagt es immer noch nicht genau aus. (Folgt aus der Tatsache, dass die Variable i vor der Initialisierung ungültig/nutzlos ist, dass dieser Block nicht zum Gültigkeitsbereich gehört?)

Also haben wir schlicht noch keine genaue Definition des Begriffes. Wir haben eine Vorstellung, was er meint, aber eine Definition haben wir nicht.

Aber das müssen wir nicht weiter vertiefen. Wir haben beide unsere Meinung zu dem Thread und in den Feinheiten werden wir uns wohl nicht wirklich annähern.


----------



## Blender3D (28. Jun 2019)

Tobias-nrw hat gesagt.:


> Deine Beiträge sind auch dumm.


Das was Du hier machst bezeichnet man in der Rhetorik als *Argumentum ad hominem*.
https://de.wikipedia.org/wiki/Argumentum_ad_hominem
Wenn Du bei einem Thema eine andere Position als Dein Gegner hast, belege diese mit guten Argumenten, statt diesen zu beschimpfen. *So etwas spricht nicht für Dich*, unabhängig davon ob Du bezüglich des Themas recht hast oder nicht.


----------



## Xyz1 (28. Jun 2019)

Mir Populismus vorzuwerfen, ist nicht gerade nett. Zumal ich mit den Persönlichkeiten/dem Persönlichem nicht anfing.

Ich habe gar keine lust, weiter zu diskutieren... Das sei mir gestattet. Außerdem habe ich darum gebeten, alle unsachlichen Beiträge zu entfernen.

(Das wären u.a. alle von @kneitzel .)


----------



## kneitzel (28. Jun 2019)

Tobias-nrw hat gesagt.:


> Mir Populismus vorzuwerfen, ist nicht gerade nett. Zumal ich mit den Persönlichkeiten/dem Persönlichem nicht anfing.
> 
> Ich habe gar keine lust, weiter zu diskutieren... Das sei mir gestattet. Außerdem habe ich darum gebeten, alle unsachlichen Beiträge zu entfernen.
> 
> (Das wären u.a. alle von @kneitzel .)



Wie bitte? Welche Beiträge sind unsachlich? Mein letzter Beitrag, der dargelegt hat, dass Du eben keine Definition geliefert hast? Ich werde Dir jetzt nicht die Arbeit abnehmen, einmal zu recherchieren, wie man Begriffe definieren kann und sollte und was eine Definition ist...(Sollte jemand, der Abitur hat oder gerade macht eigentlich kennen und können aber zur Not gibt es im Internet genug Informationen, die man nachlesen könnte....)

Oder der Beitrag davor? Das war eine sachliche Antwort auf Meniskusschaden....

Oder welche Beiträge sind unsachlich? Aber alle meine Beiträge doch ganz offensichtlich nicht!

Aber Du wirst uns jetzt hoffentlich alle überraschen und begründen, wieso alle Beiträge von mir unsachlich sein sollen.


----------



## Xyz1 (29. Jun 2019)

Du machst doch schon unsachlich/mit Persönlichem weiter... Und merkst das und dass Deine "Argumentation" hinfällig/obsolet ist, gar nicht mehr. Jemanden ohne Kritikfähigkeit kann man nicht vom Gegenteil überzeugen. Und das muss man ja auch nicht. Wenn dem Betroffenen das Sandschloss gefällt, gefällt es eben. Ob es beim nächsten Regen zusammenfällt, da es auf keinem festen Grund gebaut wurde, ist dabei nebensächlich...
Aber baue ruhig weiter.


----------



## kneitzel (29. Jun 2019)

Wieder nichts konkretes. Wieso kannst Du es nicht konkretisieren?

Also ein paar klare Fragen:
a) Wo mache ich mit Persönlichem weiter? Dass ich Dir unterstelle, dass Du weißt, was eine Definition ist? Das ist eine wirklich bösartige Unterstellung. (Interessanter Weise incl. Begründung: Abitur. Muss man das vertiefen bezüglich wissenschaftliche Arbeit verfassen können und so? Da gehören Begriffsdefinitionen auch dazu.... Und wer dies list wird erkennen, dass dies auch nur eine Begründung war, wieso ich nicht gute Links zu dem Thema Definitionen heraus suchen wollte....)

b) Meine Argumentation ist hinfällig  / obsolet? Wieso das? Dass meine Argumentation bezüglich des von Dir speziell definierten Begriffs nicht hinfällig/obsolet ist, hast Du ja gezeigt, als Du an Deiner Definition weiter festgehalten hast.

c) Wo bitte baue ich auf Sand? In meinen Posts habe ich z.B. auf die JLS gebaut. Wieso ist das für Dich im übertragenen Sinne "Sand"? In der aktuell anhaltenden Diskussion setze ich auf die Definition von Diskussion z.B. bei Wikipedia wonach dies ein Austausch von Argumenten ist. Wo ist dies in Deinen Augen "Sand"?

Deine reine Sichtweise ohne jegliche Argumente und Begründungen führen zu nichts. Wie man Dinge referenzieren kann, kannst Du z.B an meinen Beiträgen sehen. Bestimmt keine Glanzstücke, da nur einfache Postings in einem Forum, aber man kann recht gut erkennen, wie ich versuche, meine Aussagen etwas zu untermauern. Bei Definition von Begriffen ziehe ich zum Beispiel andere Definition heran wie z.B. die Java Language Specification. Dem muss man nicht zustimmen (siehe Meniskusschaden, der mit Gegenargumenten kommt) aber es untermauert die eigene Position.

Kannst Du neben der reinen Äußerung Deiner Sichtweise etwas erläutern, wie Du zu dieser kommst? Ich habe konkrete Fragen formuliert. Evtl. willst Du diese einfach einmal beantworten.

Bezügich


Tobias-nrw hat gesagt.:


> Jemanden ohne Kritikfähigkeit kann man nicht vom Gegenteil überzeugen. Und das muss man ja auch nicht.


Dem stimme ich voll und ganz zu. Sollte also erneut keine Argumente kommen sondern nur so eine reine Meinungsäußerung, dann werde ich darauf nicht weiter eingehen. (Ich habe jetzt zwei Mal hintereinander nach konkreten Aussagen gefragt und es ist beides Mal unter dem Strich nichts konkretes von Dir gesagt worden.


----------



## mrBrown (29. Jun 2019)

Meniskusschaden hat gesagt.:


> Ich verweise noch mal auf Beitrag #23 von @mrBrown. Der wäre ohne (begriffliche) Unterscheidung bestimmt viel umständlicher ausgefallen und ist doch sehr aufschlussreich geworden. Also ja: wenn man darüber sprechen möchte, ist die Unterscheidung sinnvoll.


Die Begrifflichkeit dafür gibts ja, sogar in der JLS. Der Beitrag wäre nicht weniger umständlich geworden, wenn man statt „gültig“ einfach ugs. „initialisiert“ (oder nach JLS _definitely assigned_) benutzt hätte  Gültigkeitsbereich hab ich da nur geschrieben,  damit er sich nicht beschweren kann, dass ich es nicht tue.



Meniskusschaden hat gesagt.:


> Daraufhin hat er einen Trollvorwurf kassiert. Warum? Er hat doch eine ganz normale Ansicht geäußert, die man haben darf und nach Rückfrage des unklaren Begriffs sofort dargelegt, was er damit meint. Man soillte nicht ganz aus den Augen verlieren, dass er hier provoziert wurde - auch wenn ich vermute, dass das keine vorsätzliche Provokation war, sondern nur eine Fehldeutung seines Postings.


Ja, das war leider etwas vorschnell von mir. @Tobias-nrw, entschuldige bitte, dass ich deinen Beitrag dort als Trollen bezeichnet habe.

Den Inhalt des Beitrags (unabhängig vom Ersteller) halte ich aber immer noch für Unsinn, siehe meine Längere Erklärung in #23, vor allem aber auch im Kontext des Beitrags, auf den er sich bezog.
Dort wurden alle Variablen direkt initialisiert - und genau das führte erst zu diesem Fehler. Ein möglichst spätes initialisieren hätte den Fehler behoben (ebenso ein kleinerer Scope).

Ich bin auch weiterhin der Meinung, das Variablen keineswegs so früh wie möglich nach der Deklaration zugewiesen werden sollten. Die Deklaration sollte so spät wie möglich erfolgen, und danach auch das erste Zuweisen so spät wie möglich. Der Fall, dass beides getrennt ist, dürfte sich allerdings auf Zuweisungen in einem if-else beschränken (oder hat grad wer noch andere Fälle?), welches sich meist Refactoren lässt.

Das einzige Beispiel, welches dazu von @Tobias-nrw kam, hat man mit einem einfachen „Scope minimieren“ deutlich sinnvoller behandelt. Ein Beispiel, in dem man zusätzlich zu „Scope minimieren“ noch den „Gültigkeitsbereich“ maximieren könnte, ist er bis jetzt leider schuldig geblieben.


----------



## mihe7 (29. Jun 2019)

mrBrown hat gesagt.:


> Der Fall, dass beides getrennt ist, dürfte sich allerdings auf Zuweisungen in einem if-else beschränken (oder hat grad wer noch andere Fälle?), welches sich meist Refactoren lässt.


Schleifen.


----------



## mrBrown (29. Jun 2019)

mihe7 hat gesagt.:


> Schleifen.


Meinst du die typischen `while ((string = read()) != null)` - stimmt, an die hab ich gar nicht gedacht, wobei man daraus auch oft for-schleifen machen kann. Oder meinst du was anderes?


----------



## mihe7 (29. Jun 2019)

mrBrown hat gesagt.:


> Oder meinst du was anderes?


Nein, die meinte ich und do-while, wenn für die Abbruchbedingung eine Variable verwendet wird.

EDIT: wobei es natürlich auch noch die Möglichkeit gibt, in einer Schleife eine Variable zu verändern, die erst später gebraucht wird.


----------



## Blender3D (29. Jun 2019)

Tobias-nrw hat gesagt.:


> @kneitzel Deine Beiträge sind auch dumm.


Also wenn das nicht persönlich ist.....  ????


Tobias-nrw hat gesagt.:


> Mir Populismus vorzuwerfen, ist nicht gerade nett. Zumal ich mit den Persönlichkeiten/dem Persönlichem nicht anfing.


Versuch einmal diese beiden Aussagen logisch zu verknüpfen und poste dann deine Schlussfolgerung.
Es handelt sich hierbei um einen ganz einfachen logischen Zusammenhang. Also keine schwierige Aufgabe.


----------



## kneitzel (29. Jun 2019)

mihe7 hat gesagt.:


> Nein, die meinte ich und do-while, wenn für die Abbruchbedingung eine Variable verwendet wird.
> 
> EDIT: wobei es natürlich auch noch die Möglichkeit gibt, in einer Schleife eine Variable zu verändern, die erst später gebraucht wird.



Ja, da hatte ich auch kurz dran gedacht. Aber da sind mir ein paar Gedanken durch den Kopf gegangen bezüglich Sinn / Unsinn:
a) In einer Schleife einen Wert immer wieder zu setzen: Dies halte ich für wenig effektiv. Oder könnt ihr euch da einen sinnvollen Einsatz vorstellen?
b) Wenn in der Schleife nicht ständig zugewiesen wird sondern nur zu bestimmten Bedingungen: Dann komme ich ggf. zu dem Problem, dass die Variable auch nach der Schleife nicht sicher einen Wert hat, oder? (Also es muss der Fall a sein, nur eben leicht modifiziert a.la. unterschiedliche Werte werden in if / else zugewiesen ....)
c) Und wenn ich nicht nur in die Variable schreiben will sondern auch lesen, dann trifft mich a/b doch auch wieder, weil ohne dass eine sichere Zuweisung erfolgt ist, kann ich den Wert nicht lesen....

Aber evtl. ist es auch einfach Unsinn, sich so im Detail den Kopf zu zerbrechen, denn dies ist ja eigentlich ein xy Problem. Die Kernfrage war ja Clean Code. Aber dieses konkrete Problem stellt sich nicht erst, wenn man das Ursprüngliche Problem direkt mit einem Refactoring in mehrere Methoden direkt sauber lösen kann (Wurde ja auch schon im Thread sauber aufgezeigt.)


----------



## mihe7 (29. Jun 2019)

Ist zwar ein wenig konstruiert, was besseres ist mir ad hoc nicht eingefallen; Vorbedingung: next() liefert wenigstens ein Element.

```
String last;
do {
    last = next();
} while (hasNext());
System.out.println(last);
```
Ansonsten hast Du nicht ganz unrecht  Da gibt es meist bessere Wege.


----------



## Xyz1 (29. Jun 2019)

Blender3D hat gesagt.:


> Es handelt sich hierbei um einen ganz einfachen logischen Zusammenhang.


Dass ich Bockmist nicht einfach so stehen lasse? Oder worauf wolltest Du hinaus?


----------



## kneitzel (29. Jun 2019)

Tobias-nrw hat gesagt.:


> Dass ich Bockmist nicht einfach so stehen lasse? Oder worauf wolltest Du hinaus?


Was genau meinst Du? Was bezeichnest Du wieso als Bockmist?

Und wolltest Du mit unsachlichen Aussagen nicht aufhören? Oder was hast Du hier zu welcher Sache beigetragen?

Vielleicht kommen ja jetzt endlich mal Argumente.


----------

