Skripting: Unterschied zwischen den Versionen

Aus GeoGebra Manual
Wechseln zu: Navigation, Suche
(removed chapter about USB logger)
 
(12 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
<noinclude>{{Manual Page|version=4.0}}</noinclude>{{objects|property}}
+
<noinclude>{{Manual Page|version=5.0}}</noinclude>{{objects|property}}
:{{translate|Scripting}}
+
Skripte sind eine Abfolge von Befehlen, die nacheinander ausgeführt werden. GeoGebra bietet zwei Skriptsprachen um Befehle anzugegeben - GGBScript und JavaScript . Die Ausführung eines Skriptes kann ausgelöst werden durch:
GeoGebra unterstützt zwei Skriptsprachen -- GGBScript und Javascript. Skripte sind eine Abfolge von Aktionen die ausgelöstw erden durch:
+
* Klicken auf ein bestimmtes Objekt
* Klicken oder Update eines bestimmten Objektes
+
* Aktualisierung (''Wert-Veränderung, Neudefinition'') eines bestimmten Objektes
 
* Laden der Datei (im Fall von JavaScript)
 
* Laden der Datei (im Fall von JavaScript)
* Javascript listeners (siehe auch [[Reference:JavaScript]])
+
* Javascript Listeners (siehe auch [http://wiki.geogebra.org/en/Reference:JavaScript JavaScript])
Sie können die Skript-Funktion mithilfe des [[Eigenschaften-Dialog]] erreichen. Gehen Sie dazu auf den Kartenreiter ''Erweitert'' und setzten Sie ein Häkchen bei ''Ermögliche Skripting''.
 
  
==GGBScript==
+
Die Skripte werden im Tab "Skripting" im [[File:Menu-options.svg|link=|16px]] [[Eigenschaften-Dialog]] eines Objektes eingegeben.
Sie können Skripte erzeugen, die GeoGebra-Befehle enthalten.
+
 
 +
===GGBScript===  
 +
Sie können Skripte erzeugen, die einfach nur eine Auflistung von GeoGebra-Befehlen enthalten, wie man sie auch in der [[Eingabezeile]] eingeben kann. Beim Aufruf des Skriptes, werden die Befehle hintereinander ausgeführt.
 
{{Example|1=<div>
 
{{Example|1=<div>
* ''a'' ist ein [[Schieberegler_(Werkzeug)|Schieberegler]] von 1 bis 3, der nur ganzzahlige Werte zulässt
+
* ''a'' ist ein [[Schieberegler_(Werkzeug)|Schieberegler]] von 1 bis 3, der nur ganzzahlige Werte zulässt (d.h. die Schrittweite beträgt 1)
* <code><nowiki>liste1 = {"rot", "grün", "blau"}</nowiki></code>
+
* Geben Sie <code><nowiki>Liste1 = {"rot", "grün", "blau"}</nowiki></code> ein.
* in den Eigenschaften von ''a'' setzen Sie das Skript "Bei Update" auf <code>SetzeFarbe[a, Element[liste1, a]]</code>
+
* Gn den Eigenschaften von ''a'' tragen Sie als Skript im Tab "Bei Update" ein: <code>SetzeFarbe[a, Element[Liste1, a]]</code>
* wenn Sie nun den Schieberegler bewegen ändert er seine Farbe</div>}}
+
* Wenn Sie nun den Schieberegler bewegen ändert er seine Farbe</div>}}
  
==JavaScript==
+
'''Erklärung:''' Jedes Mal wenn der Schieberegler bewegt wird findet ein "Update" statt. Dann wird auch jedes Mal das Skript aufgerufen, was dann den Wert vom Schieberegler ''a'' nutzt, um die Farbe aus der Liste auszulesen und die Farbe von ''a'' zu ändern.
JavaScript ist eine Programmiersprache die in zahlreichen Internettechnologien eingesetzt wird. Im Gegensatz zu GeoGebra Script müssen die Befehle nicht als einfache Sequenzen ausgeführt werden, sondern es können auch Kontrollstrukturen wie (<code>if</code>, <code>while</code>, <code>for</code>) verwendet werden. Sie finden ein gute Anleitung zur Verwendung von JavaScript auf [https://developer.mozilla.org/de/JavaScript developer.mozilla.org]. In GeoGebra können Sie aber spezielle JavaScriptmethoden benutzen, um die Konstruktion zu verändern. Diese Methoden gehören zu den ggbApplet Objekten, was bedeutet, dass Sie diese durch <code>ggbApplet.method_name(parameter,..,parameter)</code> aufrufen können. Die vollständige Liste dieser Methoden finden Sie unter [[Reference:JavaScript]].
+
 
 +
{{note|Es gibt einige Befehle, die speziell für das Skripting gedacht sind. Sie finden diese auf der Seite [[Skripting_(Befehle)]]}}
 +
 
 +
===JavaScript===  
 +
JavaScript ist eine Programmiersprache, die vor allem im Internet eingesetzt wird. Im Gegensatz zu GeoGebraScript können Sie damit Befehle nicht nur einfach hintereinander ausführen lassen, sondern es können auch Kontrollstrukturen wie <code>if</code>, <code>while</code> und <code>for</code> verwendet werden. Sie finden eine gute Anleitung zur Verwendung von JavaScript auf [https://developer.mozilla.org/de/JavaScript developer.mozilla.org].  
 +
 
 +
Im Falle von GeoGebra müssen Sie spezielle JavaScript-Methoden benutzen, um die Konstruktion zu verändern. Diese Methoden gehören zu dem ggbApplet-Objekt, was bedeutet, dass sie Befehle der Art  <code>ggbApplet.method_name(parameter,..,parameter)</code> aufrufen müssen. Die vollständige Liste der Methoden finden Sie unter [http://wiki.geogebra.org/en/Reference:JavaScript JavaScript].
  
 
{{Example|1=
 
{{Example|1=
Zeile 27: Zeile 34:
 
}}
 
}}
  
GeoGebra beinhaltet seine eigene JavaScript engine. When exported as [[Dynamic Worksheet]] one can choose whether to use this engine or the one contained in browser applets. If you edit JavaScript in a HTML page, the ggbApplet variable will not be initialized, you have to initialize it e.g. using <code>ggbApplet=document.applets[0];</code> first.
+
{{Note|Das Skripting mit JavaScript ist aufgrund der Kontrollstrukturen sehr vielseitig einsetzbar. Allerdings lassen sich viele Aufgaben mit dem einfacheren GeoGebraScript bewältigen.}}
 +
 
 +
GeoGebra beinhaltet seine eigene JavaScript-Engine. Wenn Sie [[Export-Dialog für Arbeitsblätter|dynamische Arbeitsblätter]] exportieren, können Sie zwischen dieser Engine oder derjenigen, die im Browser verwendet wird, auswählen. Wenn Sie JavaScript auf einer HTML Seite bearbeiten, so wird die ggbApplet-Variable nicht initialisiert. Sie müssen zuerst <code>ggbApplet=document.applets[0];</code> eingeben, um das ggbApplet korrekt verwenden zu können.
 +
 
 
===Global JavaScript===
 
===Global JavaScript===
In the Global JavaScript part of Scripting tab in [[Properties Dialog]] you may define some functions or do some assignments that will be done before the construction is loaded. You can also define function ''ggbOnInit()'', which is called automatically once the construction is loaded. The ggbOnInit function can be used for registering some listeners, as shown below.{{example|1=
+
Im ''Global JavaScript'' Teil des Tabs ''Skripting'' im [[File:Menu-options.svg|link=|16px]] ''Eigenschaften-Dialog'' können auch '''Funktionen''' oder '''Anweisungen''' definiert werden, die vor dem Laden der Konstruktion ausgeführt werden und auch für andere Skripts verfügbar sind. Sie können auch Funktionen wie ''ggbOnInit()'' eingeben, welche automatisch ausgerufen werden, sobald Ihre Konstruktion geladen wird. Die Funktion ''ggbOnInit()'' kann auch für ''Listeners'' benutzt werden, wie das folgende Beispiel zeigt:
 +
{{example|1=
 
<pre>
 
<pre>
 
function onAdd(name){
 
function onAdd(name){
     alert("Object "+name+" was added.");
+
     alert("Objekt "+name+" wurde hinzugefügt.");
 
}
 
}
  
Zeile 39: Zeile 50:
 
}
 
}
 
</pre>
 
</pre>
First we defined function ''onAdd'' that given a string shows a message depending on that string. After that, using the ''ggbOnInit'' function, we told GeoGebra to call this function whenever a new object is added. Once we reload our construction, function ggbOnInit will be called and since then, when user adds a point named e.g. ''A'', message "Object A was added" will appear. }}
 
  
You can also use listeners for actions like rename, delete and clear construction. Complete list is available in [[Reference:JavaScript]].
+
'''Erklärung:''' Zuerst haben wir die Funktion ''onAdd'' definiert, die eine Nachricht zeigt, die vom gegebenen String abhängt. Danach legen wir fest, dass GeoGebra die Funktion ''ggbOnInit'' aufruft, sobald ein neues Objekt hinzugefügt wird. Wird unsere Konstruktion neu geladen, so wird die Funktion ''ggbOnInit'' aufgerufen. Ab diesem Zeitpunkt wird, wenn der Benutzer einen Punkt ''A'' hinzufügt, die Nachricht "Objekt A wurde hinzugefügt" angezeigt. }}
{{Note|Using any ggbApplet methods in Global JavaScript outside of ggbOnInit will not work as intended since they will be called before the construction is loaded.}}
+
 
===USB Logging===
+
Sie können ''Listeners'' aber auch benutzen um Objekte umzubenennen, zu löschen oder Konstruktionen zu löschen. Eine komplette Auflistung finden Sie unter [http://wiki.geogebra.org/en/Reference:JavaScript JavaScript].
For logging data from from some Vernier USB Data Loggers, eg ''Go!Motion'' and ''Go!Temp'' one can define a logger listener using the registerLoggerListener method. Such listener can look like this:
+
{{Note|Die Verwendung einer ggbApplet-Methode in ''Global JavaScript'' außerhalb von ''ggbOnInit'' wird eventuell nicht wie geplant funktionieren, da die Methode vor der Konstruktion geladen wird.}}
<pre>
 
function logger(value) {
 
  var d = value * 1;
 
  ggbApplet.evalCommand("(CopyFreeObject[a],"+d+")");
 
  ggbApplet.evalCommand("SetValue[a,a+1]");
 
}
 
</pre>
 
This script assumes that there is a free number ''a'' in the construction. Each time number ''d'' is logged, point ''(a,d)'' is constructed and ''a'' is increased.
 

Aktuelle Version vom 30. Oktober 2015, 18:27 Uhr


Skripte sind eine Abfolge von Befehlen, die nacheinander ausgeführt werden. GeoGebra bietet zwei Skriptsprachen um Befehle anzugegeben - GGBScript und JavaScript . Die Ausführung eines Skriptes kann ausgelöst werden durch:

  • Klicken auf ein bestimmtes Objekt
  • Aktualisierung (Wert-Veränderung, Neudefinition) eines bestimmten Objektes
  • Laden der Datei (im Fall von JavaScript)
  • Javascript Listeners (siehe auch JavaScript)

Die Skripte werden im Tab "Skripting" im Menu-options.svg Eigenschaften-Dialog eines Objektes eingegeben.

GGBScript

Sie können Skripte erzeugen, die einfach nur eine Auflistung von GeoGebra-Befehlen enthalten, wie man sie auch in der Eingabezeile eingeben kann. Beim Aufruf des Skriptes, werden die Befehle hintereinander ausgeführt.

Beispiel:
  • a ist ein Schieberegler von 1 bis 3, der nur ganzzahlige Werte zulässt (d.h. die Schrittweite beträgt 1)
  • Geben Sie Liste1 = {"rot", "grün", "blau"} ein.
  • Gn den Eigenschaften von a tragen Sie als Skript im Tab "Bei Update" ein: SetzeFarbe[a, Element[Liste1, a]]
  • Wenn Sie nun den Schieberegler bewegen ändert er seine Farbe

Erklärung: Jedes Mal wenn der Schieberegler bewegt wird findet ein "Update" statt. Dann wird auch jedes Mal das Skript aufgerufen, was dann den Wert vom Schieberegler a nutzt, um die Farbe aus der Liste auszulesen und die Farbe von a zu ändern.

Anmerkung: Es gibt einige Befehle, die speziell für das Skripting gedacht sind. Sie finden diese auf der Seite Skripting_(Befehle)

JavaScript

JavaScript ist eine Programmiersprache, die vor allem im Internet eingesetzt wird. Im Gegensatz zu GeoGebraScript können Sie damit Befehle nicht nur einfach hintereinander ausführen lassen, sondern es können auch Kontrollstrukturen wie if, while und for verwendet werden. Sie finden eine gute Anleitung zur Verwendung von JavaScript auf developer.mozilla.org.

Im Falle von GeoGebra müssen Sie spezielle JavaScript-Methoden benutzen, um die Konstruktion zu verändern. Diese Methoden gehören zu dem ggbApplet-Objekt, was bedeutet, dass sie Befehle der Art ggbApplet.method_name(parameter,..,parameter) aufrufen müssen. Die vollständige Liste der Methoden finden Sie unter JavaScript.

Beispiel:
for(var i =0;i<10;i++) 
   ggbApplet.evalCommand("A_"+i+"=(random()*10,random()*10)");
Dieses Skript erzeugt 10 Punkte von A0 bis A9 mit zufälligen Koordinaten.
Anmerkung: Das Skripting mit JavaScript ist aufgrund der Kontrollstrukturen sehr vielseitig einsetzbar. Allerdings lassen sich viele Aufgaben mit dem einfacheren GeoGebraScript bewältigen.

GeoGebra beinhaltet seine eigene JavaScript-Engine. Wenn Sie dynamische Arbeitsblätter exportieren, können Sie zwischen dieser Engine oder derjenigen, die im Browser verwendet wird, auswählen. Wenn Sie JavaScript auf einer HTML Seite bearbeiten, so wird die ggbApplet-Variable nicht initialisiert. Sie müssen zuerst ggbApplet=document.applets[0]; eingeben, um das ggbApplet korrekt verwenden zu können.

Global JavaScript

Im Global JavaScript Teil des Tabs Skripting im Menu-options.svg Eigenschaften-Dialog können auch Funktionen oder Anweisungen definiert werden, die vor dem Laden der Konstruktion ausgeführt werden und auch für andere Skripts verfügbar sind. Sie können auch Funktionen wie ggbOnInit() eingeben, welche automatisch ausgerufen werden, sobald Ihre Konstruktion geladen wird. Die Funktion ggbOnInit() kann auch für Listeners benutzt werden, wie das folgende Beispiel zeigt:

Beispiel:
function onAdd(name){
    alert("Objekt "+name+" wurde hinzugefügt.");
}

function ggbOnInit(){
    ggbApplet.registerAddListener("onAdd");
}
Erklärung: Zuerst haben wir die Funktion onAdd definiert, die eine Nachricht zeigt, die vom gegebenen String abhängt. Danach legen wir fest, dass GeoGebra die Funktion ggbOnInit aufruft, sobald ein neues Objekt hinzugefügt wird. Wird unsere Konstruktion neu geladen, so wird die Funktion ggbOnInit aufgerufen. Ab diesem Zeitpunkt wird, wenn der Benutzer einen Punkt A hinzufügt, die Nachricht "Objekt A wurde hinzugefügt" angezeigt.

Sie können Listeners aber auch benutzen um Objekte umzubenennen, zu löschen oder Konstruktionen zu löschen. Eine komplette Auflistung finden Sie unter JavaScript.

Anmerkung: Die Verwendung einer ggbApplet-Methode in Global JavaScript außerhalb von ggbOnInit wird eventuell nicht wie geplant funktionieren, da die Methode vor der Konstruktion geladen wird.

Kommentare

Ausführliche Anleitungen[Bearbeiten]

Spezielle Anwendungen[Bearbeiten]

Skripting mit Kontrollkästchen verwenden[Bearbeiten]

Mit Skripting kann man die Möglichkeiten der Kontrollkästchen erweitern. Beispiele und eine Anleitung finden Sie auf der Seite zum Kontrollkästchen.

Zufallszahlen mit Skripten verwenden[Bearbeiten]

Bei der Verwendung von Skripten und Zufallszahlen gilt es eine Grundregel bzgl. der Zufallszahlen zu beachten:

Sobald ein Objekt neu berechnet wird, in dessen Definition eine Zufallszahl vorkommt, wird auch die Zufallszahl neu berechnet.
Beispiel: Hat man eine Zahl definiert durch z=Zufallszahl[1,2]*a, wobei a ein Schieberegler ist, dann wird z auch dann neu berechnet, inklusive neuer Zufallszahl, wenn man den Wert des Schiebereglers verändert.

Man muss deshalb beim Erstellen einer Zeichnung darauf achten, dass das Objekt, das die Zufallszahl enthält, nicht neudefiniert wird, wenn man die "alte" Zufallszahl behalten will. Das ist zum Beispiel dann der Fall, wenn man per Zufall Aufgaben erstellen und sie dann automatisch kontrollieren lassen will.

Mögliche Lösungen:

  1. Man sichert das gesuchte Ergebnis in einer Variable, die nicht mehr von einer Zufallszahl abhängig ist. Dazu nutzt man den Befehl KopiereFreiesObjekt und merkt sich so das Ergebnis, auch wenn sich die Zufallszahl ändert.
  2. Man verwendet gleich KopiereFreiesObjekt , um das Objekt vor einer Neuberechnung zu bewahren.


© 2024 International GeoGebra Institute