
V předchozích článcích jsme si ukázali jak spočítat v CombiScriptu faktoriál pomocí rekurze. Nicméně to není úplně typický přístup. Mnohem častěji bychom faktoriál počítali třeba pomocí cyklu while, který bude běžet od zadaného čísla do jedné.
V takovém případě ovšem potřebujeme někam ukládat počítaný výsledek. Potřebujeme tedy založit proměnnou, což se ovšem v JS neobejde bez klíčových slov var či let, které ovšem přes PHP parser neprojdou.
Co s tím?
Nejjednodušším řešením, je tuto proměnnou deklarovat mezi vstupními parametry funkce. Ovšem PHP vyžaduje abychom každé deklarované proměnné nastavili při volání hodnotu. Abychom ji nemuseli plnit z volací funkce tak jí musíme nastavit výchozí hodnotu. Nastavení výchozí hodnoty deklarované a při volání funkce nepoužité proměnné je v PHP i v JS stejné, takže tím se náš kód pro oba jazyky sjednotí.
A aby se nám tato proměnná "nepletla" mezi opravdové argumenty funkce, tak si zavedeme konvenci, že takovéto proměnné budeme psát na druhý řádek funkce.
Kdo byl zvyklý programovat třeba v Pascalu s tím nebude mít problém, tam se také vždy všechny proměnné deklarovaly na začátku funkce.
Takový zápis funkce pak vypadá takto:
- <!-- --><?php
- "use strict";
- function my_fact($n,
- $ret=1)
- {
- while ($n>1)
- {
- $ret = $ret * $n;
- $n--;
- }
- return $ret;
- }
Knihovnu opět uložíme a použijme v JS aplikaci:
- <!doctype html>
- <HTML lang="cs">
- <HEAD>
- <META charset="UTF-8">
- <META name="viewport" content="width=device-width">
- <TITLE>Funkce faktorial</TITLE>
- </HEAD>
- <BODY style="text-align:center">
- <INPUT id=argument>
- <INPUT type=button value="Spocti faktorial" onclick="Spocti()">
- <DIV id=Vysledek></DIV>
- <SCRIPT src="./my_lib.php.js"></SCRIPT>
- <SCRIPT>
- function Spocti()
- {
- var value = document.getElementById("argument").value;
- document.getElementById("Vysledek").innerHTML = my_fact(value);
- }
- </SCRIPT>
- </BODY>
- </HTML>
- <!-- --><?php
- "use strict";
- function my_fact($n,
- $ret=1)
- {
- while ($n>1)
- {
- $ret = $ret * $n;
- $n--;
- }
- return $ret;
- }
A zcela stejnou knihovnu použijeme i v PHP aplikaci:
- <!doctype html>
- <HTML lang="cs">
- <HEAD>
- <META charset="UTF-8">
- <META name="viewport" content="width=device-width">
- <TITLE>Funkce faktorial</TITLE>
- </HEAD>
- <BODY style="text-align:center">
- <FORM method=GET>
- <INPUT name=argument value="<?= $_GET['argument'] ?>">
- <INPUT type=submit value="Spocti faktorial">
- </FORM>
- <?php
- include_once('./my_lib.php.js');
- if ($_GET['argument']!==null)
- {
- echo my_fact($_GET['argument']);
- }
- ?>
- </BODY>
- </HTML>
- <!-- --><?php
- "use strict";
- function my_fact($n,
- $ret=1)
- {
- while ($n>1)
- {
- $ret = $ret * $n;
- $n--;
- }
- return $ret;
- }
Tímto umíme vytvářet naše vlastní funkce. Ovšem každý jazyk potřebuje nejen vytvářet vlastní funkce, ale i mít přístup k nějakým základním funkcím pro práci s čísly, stringy, poli, atd... A zde máme zásadní problém, protože tyto funkce se samozřejmě jmenují jinak v JS a jinak v PHP.
V příštím článku si ukážeme jak volat systémové funkce PHP a JS jednotným přístupem. Konkrétně si to ukážeme na funkci sqrt() / Math.sqrt(). V rámci rozvíjení kreativity o tom můžete zatím přemýšlet.