+ All Categories
Home > Documents > FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Date post: 20-Aug-2015
Category:
Upload: verein-fm-konferenz
View: 740 times
Download: 0 times
Share this document with a friend
37
Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com Konstrukte diverser Programmiersprachen in FileMaker nachgebaut Thomas Hirt
Transcript
Page 1: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

Konstrukte diverser Programmiersprachen in FileMaker

nachgebaut

Thomas Hirt

Page 2: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

Was Sie erwartet

In den folgenden 90 Minuten erwartet Sie ein Leitfaden dazu, wie

sich FileMaker mittels Custom Functions um mächtige

Programmierkonstrukte erweitern lässt.

Einleitend erkläre ich, worin die Stärken und Schwächen von

Custom Functions liegen, wenn man sie mit anderen Methoden

vergleicht, mit denen man Ähnliches erreichen kann.

Page 3: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

Inhaltsübersicht

• Plugin oder nicht Plugin, das ist hier die Frage

• Skripten vs. Custom Functions

• (m)eine Methode zur Entwicklung einer CF Library kurz vorgestellt

• Welche programmatischen Mittel stehen in CFs zur Verfügung?

• konkrete Beispiele

• Arrays

• Key-Value Pairs

• Iteratoren

• weitere Ideen für Strukturen, Werkzeuge und Bibliotheken

• Q&A

Page 4: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

Plugin oder nicht Plugin, das ist hier die Frage

PRO Plugin

• teilweise Zusatzfunktionalität,

welche nur als Plugin erhältlich

ist

• Code aus anderen

Programmiersprachen in FM

nutzbar

• teilweise kommerzieller Support

erhältlich

• sofort verfügbar

• gut kalkulierbare Kosten

PRO Eigenentwicklung

• FM Go kennt keine Plugins

• Abhängigkeit birgt Gefahren

• ungefixte Bugs

• Unterstützung neuer

FileMaker Releases

• Inkompatibilitäten mit

Updates bei Drittsoftware

• Know-How entsteht in house

• schnelle Reaktion auf Feature

Requests möglich

Page 5: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

Skripten vs. Custom Functions

Skripten

• Clickable

• Scriptmaker

• Debugger

• Loops

Custom Functions

• Reintext

• Eingabefeld oder externer Editor

• debugging "von Hand"

• Rekursionen Limits!!

Page 6: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

Skripten vs. Custom Functions

• Maximum an rekursiven Aufrufen in einer CF: 50'000

• maximale Rekursionstiefe zu einem bestimmten Zeitpunkt: 10'000

• maximale Grösse einer Formel: 30'000 Zeichen

Limitationen von Rekursionen in Custom Functions

Page 7: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

Skripten vs. Custom Functions

Skripten

• Clickable

• Scriptmaker

• Debugger

• Loops

• schwer versionierbar

• >1 Parameter nur mit Methoden

des "Function Scriptings"

• fast immer abhängig von FMDB

• langsam

Custom Functions

• Reintext

• Eingabefeld oder externer Editor

• debugging "von Hand"

• Rekursionen

• extern leicht versionierbar

• viele Parameter möglich

• Code ist leicht unabhängig von

konkreter FMDB zu halten

• schnell

Limits!!

Page 8: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

Skripten vs. Custom Functions

• Geschwindigkeitstest

• Taylor-Reihe zur numerischen Berechnung von sin(x)

• α in Radiant ( 0 ≤ α ≤ 2π )

• π als Konstante

• x in Grad (normiert auf 0° ≤ x ≤ 360°) mittels Modulo-Funktion

• berechnet wurde

• sin(x) für schrittweise erhöhte Gradzahlen

• Anzahl Schritte und Schrittweite wählbar

• Zeitmessung

...!15!13!11!9!7!5!3!1

)sin(1513119753

Page 9: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

Skripten vs. Custom Functions

• unterschiedliche Berechnungsmethoden

• alles mittels Skripten, ein Datensatz pro Berechnung

• alles mittels Skripten, globales Feld für Resultate

• alles mittels Skripten, Einsatz von Variablen

• alles mittels Custom Functions

• möglichst viel mittels Custom Functions

Page 10: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

Skripten vs. Custom Functions

Page 11: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

Skripten vs. Custom Functions

Page 12: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

(m)eine Methode zur Entwicklung einer CF Library kurz vorgestellt

• Werkzeuge

• Sublime Text als Editor

• Subversion oder Git als Code Versionierungssystem

• eine FM12 DB als CF Repository

• Konventionen

• Englisch

• umfangreicher Header in jeder CF

• in-code Dokumentation

• Wiederverwendbarkeit

• Sinn der Sache

• Vermeidung von Abhängigkeiten

Page 13: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

Welche programmatischen Mittel stehen in CFs zur Verfügung?

• Strukturen

• Sequenzen ( Instruktion;

Instruktion; Instruktion; … )

• Verzweigungen ( If, Case )

• Rekursionen

• Code Block ( Let )

• Variablen

• Skript-lokale Variablen

(z.B. $var)

• *.fmp12-lokale Variablen,

genannt "globale" Variablen

(z.B. $$var)

• CF-lokale Variablen

(z.B. _var)

• Referenzen auf Felder

• globale Felder

• Felder des aktiven

Datensatzes

• alle Datensätze mittels

ExecuteSQL

• Funktionen

• FileMaker Functions

• andere Custom Functions

• externe Funktionen

• Input/Output

• Parameter

• Return Value

Page 14: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

Welche programmatischen Mittel stehen in CFs NICHT zur Verfügung?

• klassische Schleifen

• komplexere Datenstrukturen

• Struct

• Union

• Array

• Listen

• Objektorientierung

• Referenzen auf Layout-

Elemente

• Referenzen auf Fenster

• Referenzen auf Ressourcen

des Betriebssystems

Page 15: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

Konkrete Beispiele

• Aus didaktischen Gründen und aufgrund der beschränkten Zeit wurde

eine verknappte Darstellung gewählt.

• In den meisten Beispielen wurden gewisse Randbedingungen

unterschlagen.

• Error-Handling wurde unterlassen.

• Ohne Ergänzungen sind die Beispiele für den produktiven Einsatz nicht

geeignet.

• Die Custom Functions, welche Sie in FileMaker-Datei im Download-

Bereich als Begleitmaterial finden, sind deutlich ausgereifter.

Page 16: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

konkretes Beispiel 1: Arrays

typische Funktionen

• Array definieren

• Array abfragen

• Array-Element befüllen

• Array-Länge herausfinden

Pseudo-Code

# array = ["a","b","c","d","e"]

> ["a","b","c","d","e"]

# wert = array[3]

> "d"

# array[0] = "z"

> ["z","b","c","d","e"]

# array.length

> 5

Page 17: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

konkretes Beispiel 1: Arrays

typische Funktionen

• Array erweitern

• Array-Element entfernen

• Arrays verschmelzen

Pseudo-Code

# array.add("x")

> ["z","b","c","d","e","x"]

# array.remove(1)

> ["z","c","d","e","x"]

# array2 = ["f","g","h"]

> ["f","g","h"]

# array.merge(array2)

> ["z","c","d","e","x","f","g","h"]

Page 18: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

konkretes Beispiel 1: Arrays

• Idee für die Abbildung

• wir haben nur Text und Variablen zur Verfügung

• Array-Struktur muss mittels Text-Delimitern erzeugt werden

• , ; | # ¶ könnten z.B. in Frage kommen

• kompliziertere Delimiter (z.B. <##> oder @@@@) für mehr Robustheit

• Abbildungsbeispiele

• 10|15|29|107|8|63

• 1'621<##>ein¶Text¶<##>ich|enthalte#sonderzeichen;<##>buh!

• eine Kombination mehrerer Delimiter erlaubt 2- und mehrdimensionale Arrays

• "1|2|3¶4|5|6¶7|8|9"

• "1|2|3¶4|5|6¶7|8|9@@@10|11|12¶13|14|15¶16|17|18@@@ 19|20|21¶22|23|24¶25|26|27"

Page 19: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

konkretes Beispiel 1: Arrays

ScriptMaker: Set Variable [$array;Value:"a|b|c|d|e"]

/* ===================================

* array.pipe.length ( array )

* =================================== */

PatternCount ( array; "|" ) + 1

/* ===================================

* array.pipe.add ( array; element )

* =================================== */

array & "|" & element

/* ===================================

* array.pipe.merge ( array1; array2 )

* =================================== */

array1 & "|" & array2

Page 20: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

konkretes Beispiel 1: Arrays

/* ===================================

* array.pipe.get ( array; index )

* =================================== */

Let (

[

_l = Length ( array );

_indices = PatternCount ( array; "|" ) + 1;

_elementPos1 = If ( index=0; 1;

Position( array; "|"; 1; index) + 1 );

_elementPosEnd = If ( index = _indices - 1; _l;

Position( array; "|"; 1; index + 1 ) - 1 );

_elementLength = _elementPosEnd - _elementPos1 + 1

];

Middle( array; _elementPos1; _elementLength )

)

Page 21: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

konkretes Beispiel 1: Arrays

/* ========================================

* array.pipe.set ( array; index; element )

* ======================================== */

Let (

[

_l = Length ( array );

_indices = PatternCount ( array; "|" ) + 1

_elementPos1 = If ( index=0; 1;

Position( array; "|"; 1; index ) + 1 );

_elementPosEnd = If ( index = _indices - 1; _l;

Position( array; "|"; 1; index + 1 ) - 1 );

];

Left( array; _elementPos1 - 1 ) & element &

Right ( array; _l - _elementPosEnd )

)

Page 22: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

konkretes Beispiel 1: Arrays

/* ===================================

* array.pipe.remove ( array; index )

* =================================== */

Let (

[

_l = Length ( array );

_indices = PatternCount ( array; "|" ) + 1

_elementPos1 = If ( index = 0; 1;

Position( array; "|"; 1; index ) + 1 );

_elementPosEnd = If ( index = _indices - 1; _l;

Position( array; "|"; 1; index + 1 ) - 1 );

];

If (

index = 0;

Right ( array; _l - _elementPosEnd - 1 );

Left( array; _elementPos1 - 2 ) &

Right ( array; _l - _elementPosEnd )

)

)

Page 23: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

konkretes Beispiel 2: Key-Value Pairs

typische Funktionen

• neues Paar zu einem Set

hinzufügen

• Wert zu Schlüssel abfragen

• abfragen, ob ein Schlüssel

enthalten ist

• ein Paar aus einem Set

entfernen

Pseudo-Code

# myWife.add("hair";"black")

> ["hair"=>"black"]

# myWife.add("height";"167cm")

> ["hair"=>"black;"height"=>"167cm"]

# myWife.get("hair")

> "black"

# myWife.exists("height")

> true

# myWife.remove("height")

> ["hair"=>"black"]

Page 24: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

konkretes Beispiel 2: Key-Value Pairs

• Vorschläge für die Abbildung

• "ferrari:12.36s|bmw:16.71s|audi:15.96s|opel:21.67s"

• "|#>|groesse|>>|169cm|<#|¶|#>|haarfarbe|>>|schwarz|<#|¶"

• In einer Variable oder einem Textfeld lassen sich auch mehrere Quasi-

Datensätze speichern.

• "{gewicht:1.6|porto:2.50|aufgabedatum:16.05.2013}¶

{gewicht:0.2|porto:0.65|aufgabedatum:02.09.2013}¶"

Page 25: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

konkretes Beispiel 2: Key-Value Pairs

ScriptMaker: Set Variable [$keyValueStore;Value:"a:1|b:2|c:3|d:4"]

/* ===================================

* keyvalue.length ( store )

* =================================== */

PatternCount ( store; "|" ) + 1

/* ===================================

* keyvalue.add ( store; key; value )

* =================================== */

store & "|" & key & ":" & value

Page 26: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

konkretes Beispiel 2: Key-Value Pairs

/* ===================================

* keyvalue.get ( store; key )

* =================================== */

Let (

[

_l = Length ( store );

_keyPos1 = Position( store; "|" & key & ":"; 1; 1 ) + 1;

_valuePos1 = _keyPos1 + Length ( key ) + 1;

// calculate end position of value and include treatment

// of special case if key is last key in store

_valuePosEnd = Position( store; "|"; _valuePos1; 1 ) -1 );

_valuePosEnd = If (_valuePosEnd = -1; _l; _valuePosEnd );

_valueLength = _valuePosEnd - _valuePos1 + 1

];

Middle( store; _elementPos1; _valueLength )

)

Page 27: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

konkretes Beispiel 2: Key-Value Pairs

/* ========================================

* keyvalue.key.exists ( store; key )

* ======================================== */

Let (

[

_keyLength = Length ( key );

_keyAtStart = ( Left ( store; _keyLength + 1) = key & ":" );

_keyInside = Position ( store; "|" & key & ":"; 1; 1)

];

If(

_keyAtStart OR _keyInside;

true;

false

)

)

Page 28: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

konkretes Beispiel 2: Key-Value Pairs

/* ===================================

* keyvalue.remove ( store; key )

* =================================== */

Let (

[

_l = Length ( store );

_keyLength = Length ( key );

_keyIsAt1 = ( Left ( store; _keyLength + 1) = key & ":" );

_keyPos1 = Position ( store; "|" & key & ":"; 1; 1 ) + 1;

_valueEnd = Position( store; "|"; _keyPos1; 1 ) - 1;

_keyIsLast = If (_valueEnd > 0; false; true );

];

Case( … )

)

Page 29: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

konkretes Beispiel 2: Key-Value Pairs

/* ===================================

* keyvalue.remove ( store; key )

* =================================== */

Let (

[ … ];

Case(

_keyIsAt1 AND _keyIsLast;

"";

_keyIsAt1;

Right ( store; _l - _valueEnd - 1);

_keyIsLast;

Left ( store; _keyPos1 - 2);

// default case: the key-value pair is in the middle

Left ( store; _keyPos1 - 2 ) &

Right ( store; _l - _valueEnd )

)

)

Page 30: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

• Grundidee

• ein Iterator ist ein Befehl, der mehrfache Ausführung verlangt

• ausgeführt wird ein frei wählbarer Codeblock

• Codeblock nimmt (optional) eine Variable entgegen

• der Codeblock wird mehrfach ausgeführt

• Beispiel: Ruby Iteratoren

• 5.times { print "*" }

> *****

• ['cat','dog','mouse'].each { |i| print |i|, " " }

> cat dog mouse

konkretes Beispiel 3: Iteratoren

Page 31: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

konkretes Beispiel 3: Iteratoren

• Iterator "times"

• iterator.times ( iterations; target; function )

• iterator.times ( 3; "abcdefghijklmn";

"Left ( \"<<target>>\"; 3 ) & \¶" )

• "abc¶abc¶abc¶"

• Iterator "each"

• iterator.each ( targets; delimiter; function )

• iterator.each ("1234¶5678¶abcd¶";"¶";"Left(<<target>>;3)")

• "123567abc"

• Basis zur Umsetzung: Evaluate()

• ahnliche Funktion im Netz: CustomList()

• http://www.briandunning.com/cf/868

• FMM 2010|04, pp21-29, Kegebein A., K&K Verlag GmbH, Hamburg

• FMM 2010|04, pp30-32, Ricker F., K&K Verlag GmbH, Hamburg

Page 32: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

konkretes Beispiel 3: Iteratoren

/* ================================================

* iterator.times ( iterations; target; function )

* ================================================ */

Let (

[

_iterations = Floor ( GetAsNumber ( iterations ) );

_iterationsValid = If ( _iterations > 0; True; False );

_function = Substitute ( function; "<<target>>"; target);

_result = Evaluate ( _function )

];

Case (

NOT _iterationsValid; "";

_iterations = 1; _result;

_result & iterator.times ( _iterations - 1; target; function )

)

)

Page 33: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

konkretes Beispiel 3: Iteratoren

/* ================================================

* iterator.each ( targets; delimiter; function )

* ================================================ */

Let (

[

_delim = Position ( targets; delimiter; 1; 1 );

_target = If ( _delim>0; Left(targets; _delim - 1); targets );

_rem = Right ( targets; Length ( targets ) - _delim );

_function = Substitute ( function; "<<target>>"; _target );

_result = Evaluate ( _function )

];

If(

_delim > 0;

_result & iterator.each ( _rem; delimiter; function );

_result

)

)

Page 34: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

Ideen für Strukturen und Werkzeuge, die sich mit CFs umsetzen lassen

• STRUCT mit strenger Typisierung

• ERROR handling

• Vergleichsalgorithmen

• Sortieralgorithmen

• Codierungen

• ROT13

• BASE64

• Hash-Werte

• MD5

• SHA128

• Serialisierungen

Page 35: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

Ideen für Bibliotheken, die sich mit CFs umsetzen lassen

• Netzwerktoolbox

• IPv4 Adressen auf Gültigkeit überprüfen

• Ist eine IPv4 Adresse in einem bestimmten Subnetz?

• Überlappen sich 2 Bereiche von IPv4-Adressen?

• Koordinatenberechnungen

• Definition von Koordinatensystemen

• Erfassung von Punkten/Kurven/Flächen im Koordinatensystem

• Prüfung, ob eine Koordinate auf einer definierten Fläche liegt

• Umrechnung von Koordinaten aus einem System ins andere

• Analyse oder Generierung von Markup Sprachen

• JSON

• HTML

• XML

Page 36: FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

Thomas Hirt

Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konferenz 2013 Salzburg

www.filemaker-konferenz.com

Questens & Answers

Danke für Ihr Interesse!

Haben Sie Fragen?


Recommended