Der Refaktor "Elimination einer Konstanten" in Java (Der Refaktor "Elimination einer Konstanten" in Java), Lektion, Seite 723219
https://www.purl.org/stefan_ram/pub/konstantenelimination_java (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Der Refaktor „Elimination einer final-Variablen“ in Java 

Das folgende Programm enthält  eine lokale final-Variablen »k«.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final int k = 22; java.lang.System.out.println( k ); }}
java.lang.System.out
22

Das folgende gleichwertige Programm enthält keine  lokale final-Variable mehr.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( 22 ); }}
java.lang.System.out
22

Bei der Elimination einer lokalen  final-Variablen  wird der Namen einer final-Variablen an allen Stellen seiner Verwendung innerhalb des Gültigkeitsbereichs seiner Deklaration durch den eingeklammerten Initialisierungsausdruck aus der Deklaration dieses final-Variablennamens ersetzt. Danach wird die Deklarationsanweisung mit der Deklaration dieser lokalen final-Variablen entfernt. Die Klammern des eingeklammerten Ausdrucks  können schließlich entfernt werden, falls dies die Bedeutung (=das Verhalten) des Ausdrucks nicht ändert. (Dies kann bei jeder Stelle anders sein.)

Zulässigkeit Dies ist aber unter Umständen nur dann zulässig, wenn die vorkommenden Auswertungen keine Wirkungen (sondern nur Werte) haben, da die Wirkungen sonst möglicherweise an anderer  Stelle auftreten würden.

Indikation Dieser Refaktor wird verwendet, wenn die Verwendung einer final-Variablen keinen Vorteil hat, und die final-Variable daher aus dem Programm entfernt werden soll.

Namen “Inline Temporary Variable ” (Visual Studio 2016), “Inline …” (Netbeans 2018).

Beispiel

Das folgende Beispiel einer Bearbeitung zeigt die Vorgehensweise bei der Umsetzung dieses Refaktors.

Wir gehen von dem folgenden Programm aus.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final int k = 22; java.lang.System.out.println( k ); }}
java.lang.System.out
22

Der Initialisierungsausdruck der final-Variablen in ihrer Deklaration »k« lautet »22«. Wir ersetzen nun alle Verwendungen  der final-Variablen »k« im Gültigkeitsbereich ihrer Deklaration durch den eingeklammerten Initialisierungsausdruck.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final int k = 22; java.lang.System.out.println( ( 22 )); }}
java.lang.System.out
22

Nun können wir die Deklarationsanweisung der final-Variablen entfernen.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( ( 22 )); }}
java.lang.System.out
22

Da die Klammern um den Initialisierungsausdruck in dem obigen Programm nicht nötig sind, können wir auch sie entfernen und gelangen so zu dem folgenden Ergebnis des Refaktors.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println( 22 ); }}
java.lang.System.out
22

Übungsaufgaben

/   Elimination einer lokalen final-Variablen

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final double x = 2.3;
java.lang.System.out.println( x ); }}
transcript
2.3

Ersetzen Sie in dem voranstehenden Programm alle Verwendungen der final-Variablen »x« durch den Initialisierungsausdruck jener final-Variablen und entfernen Sie alsdann die Deklarationsanweisung jener final-Variablen. Es soll sich um einen Refaktor handeln; daraus folgt, daß die Ausgabe des Programms sich nicht verändern sollte.

/   Elimination einer lokalen final-Variablen (1)

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final java.lang.String s = "abc";
java.lang.System.out.println( s ); }}
transcript
abc

Die Bearbeitung dieser Aufgabe hier sollte nicht vor der Nachbesprechung der vorherigen Übungsaufgabe in Angriff genommen werden!

Ersetzen Sie in dem voranstehenden Programm alle Verwendungen der final-Variablen »x« durch den Initialisierungsausdruck jener final-Variablen und entfernen Sie alsdann die Deklarationsanweisung jener final-Variablen. Es soll sich um einen Refaktor handeln; daraus folgt, daß die Ausgabe des Programms sich nicht verändern sollte.

/   Elimination einer lokalen final-Variablen (2)

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final double x = 1.7;
java.lang.System.out.println( x ); }}
transcript
1.7

Die Bearbeitung dieser Aufgabe hier sollte nicht vor der Nachbesprechung der vorherigen Übungsaufgabe in Angriff genommen werden!

Ersetzen Sie in dem voranstehenden Programm alle Verwendungen der final-Variablen »x« durch den Initialisierungsausdruck jener final-Variablen und entfernen Sie alsdann die Deklarationsanweisung jener final-Variablen. Es soll sich um einen Refaktor handeln; daraus folgt, daß die Ausgabe des Programms sich nicht verändern sollte.

/   Elimination aller lokalen final-Variablen (3)

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final double x = 2.;
final double y = x;
java.lang.System.out.println( y ); }}
transcript
2.0

Die Bearbeitung dieser Aufgabe hier sollte nicht vor der Nachbesprechung der vorherigen Übungsaufgabe in Angriff genommen werden!

Wenden Sie den Refaktor Elimination einer lokalen final-Variablen  auf das voranstehende Programm an, um alle beiden lokalen final-Variablen zu eliminieren! Das Programm darf hinterher keine lokalen final-Variablendeklarationen mehr enthalten und muß weiterhin dasselbe Verhalten (dieselbe Ausgabe) zeigen.

/   Elimination aller lokalen final-Variablen (4)

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final java.lang.String v = "abc";
final java.lang.String w = v;
java.lang.System.out.println( w ); }}
transcript
abc

Die Bearbeitung dieser Aufgabe hier sollte nicht vor der Nachbesprechung der vorherigen Übungsaufgabe in Angriff genommen werden!

Wenden Sie den Refaktor Elimination einer lokalen final-Variablen  auf das voranstehende Programm an, um alle beiden lokalen final-Variablen zu eliminieren! Das Programm darf hinterher keine lokalen final-Variablendeklarationen mehr enthalten und muß weiterhin dasselbe Verhalten (dieselbe Ausgabe) zeigen.

/   Elimination aller lokalen final-Variablen (5)

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final int a = 4;
final int b = a;
java.lang.System.out.println( a ); }}
transcript
4

Die Bearbeitung dieser Aufgabe hier sollte nicht vor der Nachbesprechung der vorherigen Übungsaufgabe in Angriff genommen werden!

Wenden Sie den Refaktor Elimination einer lokalen final-Variablen  auf das voranstehende Programm an, um alle beiden lokalen Konstanten zu eliminieren! Das Programm darf hinterher keine lokalen Konstantendeklarationen mehr enthalten und muß weiterhin dasselbe Verhalten (dieselbe Ausgabe) zeigen.

/   Elimination aller lokalen final-Variablen (6)

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final int i = 2;
final int j = 8 * i;
java.lang.System.out.println( j ); }}
transcript
16

Die Bearbeitung dieser Aufgabe hier sollte nicht vor der Nachbesprechung der vorherigen Übungsaufgabe in Angriff genommen werden!

Wenden Sie den Refaktor Elimination einer lokalen final-Variablen  auf das voranstehende Programm an, um alle beiden lokalen Konstanten zu eliminieren! Das Programm darf hinterher keine lokalen Konstantendeklarationen mehr enthalten und muß weiterhin dasselbe Verhalten (dieselbe Ausgabe) zeigen.

/   Elimination aller lokalen final-Variablen (7)

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final double x = 2.;
final double y = java.lang.Math.floor( x );
java.lang.System.out.println( 2 * y );
java.lang.System.out.println( x ); }}
transcript
4.0
2.0

Die Bearbeitung dieser Aufgabe hier sollte nicht vor der Nachbesprechung der vorherigen Übungsaufgabe in Angriff genommen werden!

Wenden Sie den Refaktor Elimination einer lokalen final-Variablen  auf das voranstehende Programm an, um alle beiden lokalen final-Variablen zu eliminieren! Das Programm darf hinterher keine lokalen final-Variablendeklarationen mehr enthalten und muß weiterhin dasselbe Verhalten (dieselbe Ausgabe) zeigen.

/   Elimination aller lokalen final-Variablen (8)

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final double x = 1.;
final double y = java.lang.Math.sin( x );
final double z = java.lang.Math.sqrt( y );
final double u = java.lang.Math.pow( y, 0.51 );
java.lang.System.out.println( z );
java.lang.System.out.println( u ); }}
java.lang.System.out
0.9173172759781081
0.9157353176470164

Die Bearbeitung dieser Aufgabe hier sollte nicht vor der Nachbesprechung der vorherigen Übungsaufgabe in Angriff genommen werden!

Wenden Sie den Refaktor Elimination einer lokalen final-Variablen  auf das voranstehende Programm an, um alle vier lokalen final-Variablen zu eliminieren!

/   Elimination aller lokalen final-Variablen (9)

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ final double x = 1.;
final double t = java.lang.Math.sin( x )+java.lang.Math.cos( x );
final double q = java.lang.Math.sqrt( t )+ t;
final double r = java.lang.Math.pow( t*q, 2 );
java.lang.System.out.println( r ); }}
java.lang.System.out
12.486018605166068

Die Bearbeitung dieser Aufgabe hier sollte nicht vor der Nachbesprechung der vorherigen Übungsaufgabe in Angriff genommen werden!

Wenden Sie den Refaktor Elimination einer lokalen final-Variablen  auf das voranstehende Programm an, um alle vier lokale Konstanten zu eliminieren.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723219 stefan_ram:723219 Der Refaktor "Elimination einer Konstanten" in Java Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723219, slrprddef723219, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/konstantenelimination_java