Konstrukte diverser
Programmiersprachen in FileMaker
nachgebaut
Thomas Hirt

Thomas Hirt
Konstrukte diverser Programmiersp...
Was Sie erwartet
In den folgenden 90 Minuten erwartet Sie ein Leitfaden dazu, wie
sich FileMaker mittels Custom Functions ...
Inhaltsübersicht
• Plugin oder nicht Plugin, das ist hier die Frage
• Skripten vs. Custom Functions
• (m)eine Methode zur ...
Plugin oder nicht Plugin,
das ist hier die Frage
PRO Plugin

PRO Eigenentwicklung

• teilweise Zusatzfunktionalität,
welch...
Skripten vs. Custom Functions
Skripten

Custom Functions

• Clickable

• Reintext

• Scriptmaker

• Eingabefeld oder exter...
Skripten vs. Custom Functions
Limitationen von Rekursionen in Custom Functions
• Maximum an rekursiven Aufrufen in einer C...
Skripten vs. Custom Functions
Skripten

Custom Functions

• Clickable

• Reintext

• Scriptmaker

• Eingabefeld oder exter...
Skripten vs. Custom Functions
• Geschwindigkeitstest
• Taylor-Reihe zur numerischen Berechnung von sin(x)
•

sin( ) 


...
Skripten vs. Custom Functions
• unterschiedliche Berechnungsmethoden
• alles mittels Skripten, ein Datensatz pro Berechnun...
Skripten vs. Custom Functions

Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konf...
Skripten vs. Custom Functions

Thomas Hirt
Konstrukte diverser Programmiersprachen in FileMaker nachgebaut

FileMaker Konf...
(m)eine Methode zur Entwicklung einer
CF Library kurz vorgestellt
• Werkzeuge
• Sublime Text als Editor
• Subversion oder ...
Welche programmatischen Mittel stehen
in CFs zur Verfügung?
• Strukturen
• Sequenzen ( Instruktion;
Instruktion; Instrukti...
Welche programmatischen Mittel stehen
in CFs NICHT zur Verfügung?
• klassische Schleifen
• komplexere Datenstrukturen

• R...
Konkrete Beispiele
• Aus didaktischen Gründen und aufgrund der beschränkten Zeit wurde
eine verknappte Darstellung gewählt...
konkretes Beispiel 1:
Arrays
typische Funktionen

Pseudo-Code

• Array definieren

# array = ["a","b","c","d","e"]
> ["a",...
konkretes Beispiel 1:
Arrays
typische Funktionen

Pseudo-Code

• Array erweitern

# array.add("x")
> ["z","b","c","d","e",...
konkretes Beispiel 1:
Arrays
• Idee für die Abbildung
• wir haben nur Text und Variablen zur Verfügung
• Array-Struktur mu...
konkretes Beispiel 1:
Arrays
ScriptMaker:
Set Variable [$array;Value:"a|b|c|d|e"]
/* ===================================
*...
konkretes Beispiel 1:
Arrays
/* ===================================
* array.pipe.get ( array; index )
* ==================...
konkretes Beispiel 1:
Arrays
/* ========================================
* array.pipe.set ( array; index; element )
* ====...
konkretes Beispiel 1:
Arrays
/* ===================================
* array.pipe.remove ( array; index )
* ===============...
konkretes Beispiel 2:
Key-Value Pairs
typische Funktionen

Pseudo-Code

• neues Paar zu einem Set
hinzufügen

#
>
#
>

• W...
konkretes Beispiel 2:
Key-Value Pairs
• Vorschläge für die Abbildung

• "ferrari:12.36s|bmw:16.71s|audi:15.96s|opel:21.67s...
konkretes Beispiel 2:
Key-Value Pairs
ScriptMaker:
Set Variable [$keyValueStore;Value:"a:1|b:2|c:3|d:4"]

/* =============...
konkretes Beispiel 2:
Key-Value Pairs
/* ===================================
* keyvalue.get ( store; key )
* =============...
konkretes Beispiel 2:
Key-Value Pairs
/* ========================================
* keyvalue.key.exists ( store; key )
* =...
konkretes Beispiel 2:
Key-Value Pairs
/* ===================================
* keyvalue.remove ( store; key )
* ==========...
konkretes Beispiel 2:
Key-Value Pairs
/* ===================================
* keyvalue.remove ( store; key )
* ==========...
konkretes Beispiel 3:
Iteratoren
• Grundidee
• ein Iterator ist ein Befehl, der mehrfache Ausführung verlangt
• ausgeführt...
konkretes Beispiel 3:
Iteratoren
• Iterator "times"
• iterator.times ( iterations; target; function )
• iterator.times ( 3...
konkretes Beispiel 3:
Iteratoren
/* ================================================
* iterator.times ( iterations; target...
konkretes Beispiel 3:
Iteratoren
/* ================================================
* iterator.each ( targets; delimiter;...
Ideen für Strukturen und Werkzeuge,
die sich mit CFs umsetzen lassen
• STRUCT mit strenger Typisierung
• ERROR handling
• ...
Ideen für Bibliotheken, die sich mit CFs
umsetzen lassen
• Netzwerktoolbox

• IPv4 Adressen auf Gültigkeit überprüfen
• Is...
Questens & Answers

Danke für Ihr Interesse!

Haben Sie Fragen?

Thomas Hirt
Konstrukte diverser Programmiersprachen in Fi...
Vielen Dank unseren Sponsoren

Danke für die Bewertung dieses Vortrages
Thomas Hirt
Konstrukte diverser Programmiersprache...
Nächste SlideShare
Wird geladen in …5
×

FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

1.359 Aufrufe

Veröffentlicht am

0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.359
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
1
Aktionen
Geteilt
0
Downloads
42
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

FMK 2013 Konstrukte diverser Programmiersprachen in FileMaker nachgebaut, Thomas Hirt

  1. 1. Konstrukte diverser Programmiersprachen in FileMaker nachgebaut Thomas Hirt Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  2. 2. 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. Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  3. 3. 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 Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  4. 4. Plugin oder nicht Plugin, das ist hier die Frage PRO Plugin PRO Eigenentwicklung • teilweise Zusatzfunktionalität, welche nur als Plugin erhältlich ist • FM Go kennt keine Plugins • Code aus anderen Programmiersprachen in FM nutzbar • teilweise kommerzieller Support erhältlich • sofort verfügbar • gut kalkulierbare Kosten Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut • 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 FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  5. 5. Skripten vs. Custom Functions Skripten Custom Functions • Clickable • Reintext • Scriptmaker • Eingabefeld oder externer Editor • Debugger • debugging "von Hand" • Loops • Rekursionen Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut Limits!! FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  6. 6. Skripten vs. Custom Functions Limitationen von Rekursionen in 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 Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  7. 7. Skripten vs. Custom Functions Skripten Custom Functions • Clickable • Reintext • Scriptmaker • Eingabefeld oder externer Editor • Debugger • debugging "von Hand" • Loops • Rekursionen • schwer versionierbar • extern leicht versionierbar • >1 Parameter nur mit Methoden des "Function Scriptings" • viele Parameter möglich Limits!! • fast immer abhängig von FMDB • Code ist leicht unabhängig von konkreter FMDB zu halten • langsam • schnell Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  8. 8. Skripten vs. Custom Functions • Geschwindigkeitstest • Taylor-Reihe zur numerischen Berechnung von sin(x) • sin( )   1!  3 3!  5 5!  7 7!  9 9!   11  13 11!  13!   15 15!  ... • α 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 Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  9. 9. 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 Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  10. 10. Skripten vs. Custom Functions Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  11. 11. Skripten vs. Custom Functions Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  12. 12. (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 Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  13. 13. Welche programmatischen Mittel stehen in CFs zur Verfügung? • Strukturen • Sequenzen ( Instruktion; Instruktion; Instruktion; … ) • Verzweigungen ( If, Case ) • Rekursionen • Code Block ( Let ) • Variablen • Referenzen auf Felder • globale Felder • Felder des aktiven Datensatzes • alle Datensätze mittels ExecuteSQL • Funktionen • Skript-lokale Variablen (z.B. $var) • FileMaker Functions • *.fmp12-lokale Variablen, genannt "globale" Variablen (z.B. $$var) • externe Funktionen • CF-lokale Variablen (z.B. _var) Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut • andere Custom Functions • Input/Output • Parameter • Return Value FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  14. 14. Welche programmatischen Mittel stehen in CFs NICHT zur Verfügung? • klassische Schleifen • komplexere Datenstrukturen • Referenzen auf LayoutElemente • Struct • Referenzen auf Fenster • Union • Referenzen auf Ressourcen des Betriebssystems • Array • Listen • Objektorientierung Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  15. 15. 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 DownloadBereich als Begleitmaterial finden, sind deutlich ausgereifter. Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  16. 16. konkretes Beispiel 1: Arrays typische Funktionen Pseudo-Code • Array definieren # array = ["a","b","c","d","e"] > ["a","b","c","d","e"] • Array abfragen # wert = array[3] > "d" • Array-Element befüllen # array[0] = "z" > ["z","b","c","d","e"] • Array-Länge herausfinden # array.length > 5 Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  17. 17. konkretes Beispiel 1: Arrays typische Funktionen Pseudo-Code • Array erweitern # array.add("x") > ["z","b","c","d","e","x"] • Array-Element entfernen # array.remove(1) > ["z","c","d","e","x"] • Arrays verschmelzen # array2 = ["f","g","h"] > ["f","g","h"] # array.merge(array2) > ["z","c","d","e","x","f","g","h"] Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  18. 18. 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" Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  19. 19. 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 Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  20. 20. konkretes Beispiel 1: Arrays /* =================================== * array.pipe.get ( array; index ) * =================================== */ Let ( [ _l _indices = Length ( array ); = PatternCount ( array; "|" ) + 1; _elementPos1 = Position( _elementPosEnd = Position( _elementLength = If ( index=0; 1; array; "|"; 1; index) + 1 ); If ( index = _indices - 1; _l; array; "|"; 1; index + 1 ) - 1 ); _elementPosEnd - _elementPos1 + 1 ]; Middle( array; _elementPos1; _elementLength ) ) Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  21. 21. konkretes Beispiel 1: Arrays /* ======================================== * array.pipe.set ( array; index; element ) * ======================================== */ Let ( [ _l _indices = Length ( array ); = PatternCount ( array; "|" ) + 1 _elementPos1 = Position( _elementPosEnd = Position( If ( index=0; 1; array; "|"; 1; index ) + 1 ); If ( index = _indices - 1; _l; array; "|"; 1; index + 1 ) - 1 ); ]; Left( array; _elementPos1 - 1 ) & element & Right ( array; _l - _elementPosEnd ) ) Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  22. 22. konkretes Beispiel 1: Arrays /* =================================== * array.pipe.remove ( array; index ) * =================================== */ Let ( [ _l = Length ( array ); _indices = PatternCount ( array; _elementPos1 = If ( index = 0; 1; Position( array; "|"; 1; index ) + 1 _elementPosEnd = If ( index = _indices Position( array; "|"; 1; index + 1 ) ]; If ( index = 0; Right ( array; _l - _elementPosEnd - 1 Left( array; _elementPos1 - 2 ) & Right ( array; _l - _elementPosEnd ) ) ) Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut "|" ) + 1 ); - 1; _l; - 1 ); ); FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  23. 23. konkretes Beispiel 2: Key-Value Pairs typische Funktionen Pseudo-Code • neues Paar zu einem Set hinzufügen # > # > • Wert zu Schlüssel abfragen # myWife.get("hair") > "black" • abfragen, ob ein Schlüssel enthalten ist # myWife.exists("height") > true • ein Paar aus einem Set entfernen # myWife.remove("height") > ["hair"=>"black"] myWife.add("hair";"black") ["hair"=>"black"] myWife.add("height";"167cm") ["hair"=>"black;"height"=>"167cm"] Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  24. 24. 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 QuasiDatensätze speichern. • "{gewicht:1.6|porto:2.50|aufgabedatum:16.05.2013}¶ {gewicht:0.2|porto:0.65|aufgabedatum:02.09.2013}¶" Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  25. 25. 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 Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  26. 26. 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 ) ) Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  27. 27. 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 ) ) Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  28. 28. konkretes Beispiel 2: Key-Value Pairs /* =================================== * keyvalue.remove ( store; key ) * =================================== */ Let ( [ _l = Length ( store ); _keyLength = Length ( key ); _keyIsAt1 _keyPos1 = ( Left ( store; _keyLength + 1) = key & ":" ); = Position ( store; "|" & key & ":"; 1; 1 ) + 1; _valueEnd = Position( store; "|"; _keyPos1; 1 ) - 1; _keyIsLast = If (_valueEnd > 0; false; true ); ]; Case( … ) ) Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  29. 29. 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 ) ) ) Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  30. 30. konkretes Beispiel 3: Iteratoren • 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 Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  31. 31. 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 Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  32. 32. 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 ) ) ) Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  33. 33. 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 ) ) Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  34. 34. 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 Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  35. 35. 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 Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  36. 36. Questens & Answers Danke für Ihr Interesse! Haben Sie Fragen? Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com
  37. 37. Vielen Dank unseren Sponsoren Danke für die Bewertung dieses Vortrages Thomas Hirt Konstrukte diverser Programmiersprachen in FileMaker nachgebaut FileMaker Konferenz 2013 Salzburg www.filemaker-konferenz.com

×