| 

.NET C# Java Javascript Exception

Re: Groovy ist nicht Java-kompatibel!

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


Re: Groovy ist nicht Java-kompatibel!

koeberle - 21.12.2010 17:40
Bindest du diesen Code aus einer kompilierten Klasse ein oder schreibst du das so in den groovy-Code?

Christian


Re: Groovy ist nicht Java-kompatibel!

slyfox1972 - 21.12.2010 17:49
> Bindest du diesen Code aus einer kompilierten
> Klasse ein oder schreibst du das so in den
> groovy-Code?

Das hab ich in der groovyConsole getestet...

Gruß

Egon Schmid


Re: Groovy ist nicht Java-kompatibel!

saurier - 21.12.2010 20:01
Hallo Egon,

stimmt, gültiger Java-Code ist nicht immer auch gültiger Groovy-Code.

Zitat

In einem Java-Code, der Ostern zu einem Jahr berechnet, war diese Zeile drin:
public static GregorianCalendar eastern(int year) {
    ...
    int n = year - 19 * (year/19);
    ...
}

Dieser Programmcode ist Blödsinn. Da kommt immer 0 raus, aber durch Rundungsfehler
kann da auch eine Zahl entstehen. Das Java da ein Modulo als Ergebnis bekommt kann
ich nicht ganz glauben. Die Klammer bei (year/19) ist in der Modulo-Definition eine
Gaußklammer.

Zitat

Wohl nicht ganz so toll, dieses Groovy ....

Irgendwie nervt es etwas, wie oft hier behauptet wird, dass Groovy/Grails schlecht ist,
obwohl die Fehler meist beim Programmierer liegen.

Gruß,
Christian


Re: Groovy ist nicht Java-kompatibel!

slyfox1972 - 21.12.2010 20:36
saurier schrieb:
> public static GregorianCalendar eastern(int year)
> {
> ...
> int n = year - 19 * (year/19);
> ...
> }
>
> Dieser Programmcode ist Blödsinn. Da kommt immer 0
> raus, aber durch Rundungsfehler
> kann da auch eine Zahl entstehen.

Den hab nicht ich geschrieben, der stammt aus einem Buch Das Java Codebook . (Seite 24 im PDF).

Den Test hab ich in der Groovy-Konsole auch nur gemacht, um zu sehen, ob dieso Code-Zeile nicht den Modulo-Wert ausrechnet. Und stellte fest, dass da in Groovy mit float oder double gerechnet wird.

> Das Java da ein
> Modulo als Ergebnis bekommt kann
> ich nicht ganz glauben. Die Klammer bei (year/19)
> ist in der Modulo-Definition eine
> Gaußklammer.
>

Das Ganze als JUnit-Test:

package anothertest;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

public class ModuloTest {

	public ModuloTest() {
	}

	@BeforeClass
	public static void setUpClass() throws Exception {
	}

	@AfterClass
	public static void tearDownClass() throws Exception {
	}

	@Before
	public void setUp() {
	}

	@After
	public void tearDown() {
	}

	@Test
	public void test1() {
		for (int i = -100; i < 100; i++) {
			int modulo1 = i % 19;
			int modulo2 = i - 19 * (i / 19);
			assertEquals(modulo1, modulo2);
		}
	}
}

Der Test meldet keine Fehler, also liefern beide dasselbe Ergebnis.

>
> Wohl nicht ganz so toll, dieses Groovy ....
>
>
> Irgendwie nervt es etwas, wie oft hier behauptet
> wird, dass Groovy/Grails schlecht ist,
> obwohl die Fehler meist beim Programmierer
> liegen.
>

Will ja nicht sagen, dass Groovy und Grails schlecht seien. Nur einiges hätte auch besser sein können.

> Gruß,
> Christian

Gruß,
Egon


Re: Groovy ist nicht Java-kompatibel!

saurier - 21.12.2010 23:38
Hallo Egon,

du hast natürlich Recht, ich muss mich da korrigieren. In Java funktioniert
die Modulo Berechnung mit
int n = year - 19 * (year/19);
tatsächlich. Ich habe hier nur auf die Mathematik gesehen, und die sagt nunmal dass
da 0 rauskommen muss. In Groovy kommt da 0 raus, während Java damit wirklich
ein Modulo berechnet. Ich persönlich finde das Groovy-Ergebnis wesentlich intuitiver.
In Java geht auch folgender Test als korrekt durch:
assertEquals(1/4,1/3);
In Groovy gibt das einen Fehler. Wer also Java-Code, der auf dieses Verhalten von
Java setzt, in Groovy benutzt, muss wirklich mit Problemen rechnen.

Zitat

Will ja nicht sagen, dass Groovy und Grails schlecht seien. Nur einiges hätte auch besser sein können.

Besser geht immer, nur ist "gut" oder "besser" eben oft Ansichtssache,

Gruß,
Christian


Re: Groovy ist nicht Java-kompatibel!

koeberle - 22.12.2010 11:14
Hallo Christian,

> Irgendwie nervt es etwas, wie oft hier behauptet
> wird, dass Groovy/Grails schlecht ist,
> obwohl die Fehler meist beim Programmierer
> liegen.

Du sprichst mir aus dem Herzen. Wenn man eine neue Sprache anfängt sollt man sich mit ihr auch vertraut machen.

Christian


Re: Groovy ist nicht Java-kompatibel!

slyfox1972 - 22.12.2010 19:52
Es war nicht mein Ziel, Groovy irgendwie abzuwerten.

Als ich mit Groovy angefangen hatte, meinte ich, mal gelesen zu haben, Groovy sei kompatibel mit Java, was bedeuten würde, man müsste bei einer .java-Datei nur die Endung in .groovy ändern, dann hätte man Groovy. :)

Nur Erfahrungen zeigten, dass dem nicht so ist:

Wenn man eine do-while-Schleife braucht, und feststellt: "Hoppla, das geht ja gar nicht!"

Oder wenn man von Java gewohnt ist, dass "int / int" wieder ein "int" ergibt, in Groovy gibt's ein java.lang.BigDecimal .
In PHP ergibt der Ausdruck 1/2 übrigens auch 0.5 wie in Groovy, in Python und in Ruby ist's 0 wie in Java.

Naja, was ich damit sagen will, ist, wenn man von Java auf Groovy umsteigt, ist es wichtig, zu wissen, dass manches in Groovy anders behandelt wird als in Java und wo die Unterschiede liegen.

Es gibt auch Dinge in Groovy&Grails, die sind wirklich toll: Z.B. das Ergebnis einer SQL-Abfrage als JSON für Ajax-Requests ausgeben: render result as JSON

Viele Grüße und schöne Weihnachten

Egon Schmid


Re: Groovy ist nicht Java-kompatibel!

Franzi - 26.12.2010 13:10
Danke für die Diskussion!
Auch wenn manche Aussage erst mal für andere ärgerlich klingt, wenn man sagt wie man drauf kommt können alle profitieren.

Wie man hier sieht, gibt es Bücher, die sollte man nur mit der Beisszange anfassen um sie ins Feuer zu werfen. Für einen der was lernen will ist das eine extrem wertvolle Info, weil sonst merkt man oft erst nachdem man sich durchgeackert hat, dass das Lesen eines bestimmten Buchs Zeitverschwendung war.

Kompatibilität soll nicht bedeuten, dass man schwache Stellen einfach nachmacht, und im Bereich Datum und Kalender hat sich Java nicht unbeding mit Ruhm bekleckert.


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Re: Groovy ist nicht Java-kompatibel!" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.