| 

.NET C# Java Javascript Exception

import eigene Scripte/Module

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.


import eigene Scripte/Module

Ingo - 16.09.2009 03:16
Hallo,

wie konnte man Funktionen in anderen Scripten aufrufen
bzw. in andere Source-Files auslagern und doch benutzen.

Ich finde einfach nicht dazu und weiß nicht wonach suchen.

Ingo


Re: import eigene Scripte/Module

Ingo - 17.09.2009 14:35
Nö, ich habe es jetzt raus gefunden,
wichtig ist static und public:

test2.groovy:

public static def t() { println "t" }

public static def tt() { println "tt" }

test1.groovy:

import static test2.*

t()
tt()

so gehts, jetzt wäre es nur noch praktisch wenn man das public und
static irgendwie global setzen könnte um es nicht immer wieder
schreiben zu müssen.


Re: import eigene Scripte/Module

manfred - 19.09.2009 13:55
Das Ganze funktioniert auch ohne die Package Verzeichnisse. Du wolltest es Modular. Packages sind für Modularität.
Mach einfach zwei Dateien:
One.groovy:
class One {
    def haumichblau = 1
    def foobar = 2

    def myfunc() {
        haumichblau
    }    
}
Script.groovy:
println new One().myfunc()

Und dann funktioniert das auch.
Die Instantiierung ist nötig durch die Klasse.

Wichtig ist, dass der Klassenname und der Dateiname gleich lauten, beide gross, speziell bei "One", weil sonst der Class loader die Klasse nicht findet.
Vielleicht solltest Du Dir generell mal anschauen, wie der Class loader funktioniert.

Übrigens glaube ich nicht, dass das, was Du vorhast in einer Anderen "Skript"-Sprache so leicht geht, ausser vielleicht in Perl.
Einfach ein paar variablen und Funktionen in einer Datei und die dann von irgendwo aufrufen.
Woher soll denn der Groovy Compiler/Interpreter wissen von wo er die Funktionen aufrufen oder die Variablen laden soll, wenn nicht über ein Klassen-Konstrukt und der Konvention Klassenname = Dateiname.


Manfred


Re: import eigene Scripte/Module

christian - 21.09.2009 11:09
Ingo schrieb:
-------------------------------------------------------
> Sagst Du mir in der Groovy-Group ich solle in Java
> programmieren?
>
> Ein Groovy-File ist doch schon eine Klasse.

Der Compiler erzeugt zwar aus einem Groovy-Skript eine Klasse, aber das geschieht nur aus technischen Gründen im Hintergrund. Die kleinste Einheit der Modularisierung is in Groovy, genau wie in Java, die Klasse. Und was ist so schlimm daran, das Wörtchen "class" dort zu schreiben, wo man eine Klasse hat? Wenn ich mich nicht irre, bekommt man sonst auch Probleme mit GroovyDoc.

Ich nehme an, dass dein Hintergedanke die Vermeidung von Klassen als Sammelbehälter statischer Methoden ist. Im Prinzip laufen statische Elemente der Objektorientierung sowieso zuwider. Das Problem ist eigentlich, dass es sowas überhaupt gibt. Sauberer wäre es, wie in Scala, direkt Objekte deklarieren zu können. Davon gibt es dann nur ein Exemplar, das die benötigten Methoden enthält.

Aber wie du ja schon herausgefunden hast, kann man ja auch in Groovy statische Elemente eines Skripts importieren, ohne explizit eine Klasse zu verwenden. Deine Probleme damit hören sich allerdings nach einem Designfehler deiner Software an. Statische Methoden können sinnvoll nur mit (synchronisierten) freien (d. h. nicht als Parameter übergebenen) Variablen arbeiten.

> Gibt es eigentlich in Java keine statischen
> Variablen in Klassen?
> Oder kann man die nur in statischen Methoden nicht
> aufrufen.

In Java gibt es statische Variablen in Klassen und man kann sie auch in dynamischen Methoden aufrufen - nur umgekehrt geht es nicht.

> Bei wem kann man sich da eigentlich beschweren,
> das ganze
> ist ein klarer Designfehler, wie ich es will
> sollte es gehen.

Bei der Entwicklung jeder Programmiersprache müssen gewisse Kompromisse eingegangen werden. Dass in Java alles in einer Klasse enthalten muss, wird wohl eine bewusste Entscheidung gewesen sein. Ich würde mich bei James Gosling beschweren ;-)

> Wenn nicht bringt Groovy auch nichts.

Das klingt jetzt aber ein bisschen nach einem trotzigen Kind ;-) Das ist ja nicht das einzige, was Groovy ausmacht. Ansonsten gibt es auch noch andere schöne Sprachen wie Scala oder Python ...

Gruß
Christian


Re: import eigene Scripte/Module

Ingo - 03.10.2009 16:09
christian schrieb:
n.
> Dass in Java alles in einer Klasse enthalten muss,
> wird wohl eine bewusste Entscheidung gewesen sein.
> Ich würde mich bei James Gosling beschweren ;-)
>
> > Wenn nicht bringt Groovy auch nichts.
>
> Das klingt jetzt aber ein bisschen nach einem
> trotzigen Kind ;-) Das ist ja nicht das einzige,
> was Groovy ausmacht. Ansonsten gibt es auch noch
> andere schöne Sprachen wie Scala oder Python ...

Doch das ist was im wesentlichen Groovy ausmacht.
Das man damit kürzer und "straighter" programmieren kann, was denn sonst.
Und Du argumentierst schon wieder mit Java, mit dem ich nicht programmieren möchte.
Bist Du so ein Java-Programmierer?
Mit Python habe ich schon programmiert, das bietet syntaktisch/semantisch weniger Möglichkeiten.

Das Problem ist einfach das die Verbesserung von Groovy gegenüber Java bei der Modularisierung aufgehört hat, was ein recht wesentlicher Mangel ist.
Anstatt das Problem zu erkennen und mit darauf hinzuwirken, daß das besser wird diskutierst Du das Problem weg, redest dummes Zeug wie Kind...
Und ständig kommst Du mit Java, wir reden von Groovy, das den Anspruch erhebt groovy zu sein, es aber beim Problempunkt nicht ist.


Re: import eigene Scripte/Module

christian - 04.10.2009 08:21
Ingo schrieb:
-------------------------------------------------------

> Doch das ist was im wesentlichen Groovy ausmacht.
> Das man damit kürzer und "straighter"
> programmieren kann, was denn sonst.

Dass der wesentliche Vorteil von Groovy gegenüber Java die kompaktere, teilweise einfachere Programmierung ist, sehe ich auch so. Aber nur weil das in diesem Fall nicht ganz so kompakt ist, wie du das gerne hättest, ist Groovy nicht grundsätzlich sinnlos.

> Und Du argumentierst schon wieder mit Java, mit
> dem ich nicht programmieren möchte.

Zu Java habe ich etwas gesagt, weil sich deine Fragen darauf bezogen haben.

> Mit Python habe ich schon programmiert, das bietet
> syntaktisch/semantisch weniger Möglichkeiten.

Wo siehst du bei Groovy mehr semantische Möglichkeiten als bei Python? Syntaktisch ist Python allerdings wirklich eingeschränkter, was aber auch ein Vorteil sein kann (Stichwort: Wartbarkeit). Wenn es einem, wie dir, auf kompakten Code ankommt, ist Python jedenfalls eine gute Wahl - und sogar Funktionen brauchen nicht in Klassen zu stehen ...

> Das Problem ist einfach das die Verbesserung von
> Groovy gegenüber Java bei der Modularisierung
> aufgehört hat, was ein recht wesentlicher Mangel
> ist.

Diese Aussage kann man wohl als schlicht falsch bezeichnen.

> Anstatt das Problem zu erkennen und mit darauf
> hinzuwirken, daß das besser wird diskutierst Du
> das Problem weg,

Ich diskutiere das Problem nicht weg, ich sehe nur die Kleinigkeit, dass man Funktionen zur Wiederverwendung in eine Klasse schreiben muss, nicht als großes Problem oder großen Nachteil von Groovy.

> redest dummes Zeug wie Kind...

Komm mal wieder runter.

Gruß
Christian


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "import eigene Scripte/Module" 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.