Funkce v AutoLISPu

Přehled informací

Úvodní přiblížení

Než začnete programovat v AutoLISPu je důležité si uvědomit, že veškeré programy v AutoLISPu mají tvar volání funkcí. Také každý výraz v AutoLISPu je ve své podstatě volání funkce s následujícím tvarem:

Příklady volání funkce předešlé funkce:

              (jm_funkce povinný_argument)
              (jm_funkce povinný_argument volitelný_argument)

Vytvoření uživatelem definované funkce

Když již víme podstatu syntaxe programu v AutoLISPu, ukážeme si definování uživatelské funkce. Pro definování funkce použijeme příkaz AutoLISPu defun.

Syntaxe příkazu:

              (defun sym ([arguments] [/ variables...]) expr...)

Argumenty příkazu:

Poznámky k příkazu:

Příklad deklarace uživatelem definované funkce

Jako první příklad uvedeme velice známou funkci - AhojSvěte. Jedná se o nejjednodušší funkci, která zobrazí dialogový box (tzv. alert box) s pozdravem:

              (defun AhojSvetePrvni()
                (alert "Nazdárek uživatelé! \njak se Vám líbím!")
              )

Z příkladu je patrné, že nová funkce nepřebírá žádné parametry. V kódu funkce si všimněte znaku zpětného lomítka v zobrazovaném řetězci. Znak \n signalizuje AutoLISPu, aby následující text zobrazil na nový řádek.

Pokud si budete chtít tuto funkci spustit, stačí v AutoCADu načíst a spustit soubor AhojSvetePrvni1.lsp. Pokud nevíte jak

Příklad ukázky vrácení návratové hodnoty

Další příklad ukáže způsob předání výsledku z funkce. Vytvoříme funkci, která po svém zavolání vypočítá druhou mocninu argumentu:

              (defun mocnina (cislo)
                (setq cislo (* cislo cislo))
              )

Použití naší funkce:

              (setq mocnina mocnina(8))

Aby bylo možné volat funkci s argumentem, musíme v definici funkce uvést v závorkách proměnnou, do které se vstupní argumenty předají. V našem příkladu se jedná o proměnnou cislo. Pokud byste potřebovali použít více vstupních argumentů stačí do závorek napsat více proměnných oddělených mezerami.

Pokud byste potřebovali předat více argumentů z funkce musíte použít proměnnou typu seznam.

V příkladu je dobré dále si všimnout použití operátoru *. Jak jste si jistě všimli AutoLISP používá prefixovou notaci operací:

              výsledek = operátor argument1 argumen2

Více o aritmetických operátorech v AutoLISPu se dozvíte v lekci Používání proměnných a operátorů v AutoLISPu.

Specielní deklarace funkce - jako příkazu AutoCADu

V prostředí AutoCADu máme možnost definovat funkci tak, aby mohla být jednoduše vyvolána v AutoCADu jako příkaz. Nemusí se v AutoCADu volat v závorkách. Aby to bylo možné, stačí před jméno funkce uvést prefix c:jm_funkce. Malé písmeno c: značí command.

Příklad deklarace funkce jako nového příkazu AutoCADu

 (defun c:AhojSveteDruhy () 
  (alert "Dobrý den! \nJak se Vám daří!") 
 )

Po nahrání souboru s výše uvedenou funkcí stačí v AutoCADu napsat na příkazový řádek pouze AhojSvete a funkce je spuštěna - zobrazí se dialog s pozdravem. Zdrojový kód funkce je možné nahrát v souboru AhojSvete2.lsp.

Definice funkce s lokálními proměnnými

Definice uživatelské funkce umožňuje ještě jednu velice důležitou věc. V definici funkce můžete určit, které proměnné budou pouze lokální = budou viditelné pouze v těle funkce.

Syntaxe definice lokálních proměnných

    (defun jméno funkce (/ lokální_proměnná1 lokální_proměnná2 ...)

Příklad použití lokální proměnné

    (defun lokalni (/cislo) 
      (setq cislo 10)
    )

V příkladu je definována proměnná cislo, která je lokální = je možné použít ji pouze ve funkci lokalni. Pokus o získání hodnoty z proměnné cislo mimo funkci lokální vyvolá chybu. Spustíte-li tuto funkci a do okna konzole napíšete příkaz !cislo, konzole zobrazí hlášení, že funkci cislo nezná, proměnná cislo mimo funkci lokalní nelze použít. Zdrojový kód funkce je možné nahrát v souboru Lokalni.lsp.