A GNU Octave programozási nyelv

Függvények

Az Octave-ban csak függvényeket lehet írni, amelyeket definiálhatunk direktben az Octave parancssorán, az Octave-val való interakció során, vagy egy külsõ fájlban és ugyanúgy hívhatók, mint a beépített függvények.

Egy függvény lehet visszatérési érték nélküli:

function name (arg-list) body endfunction

ahol az arg-list a függvény bemenõ paramétereinek vesszõvel elválasztott listája.

Az argumentumlista természetesen lehet üres is. Legtöbb esetben viszont szeretnénk információt visszakapni a definiált függvényünktõl, az egyetlen visszatérési értékkel rendelkezõ függvény szintakszisa:

function ret-var = name (arg-list) body endfunction

ahol a ret-var annak a változónak a neve, amelynek értékét a függvény visszaadja. Ezt a változót meg a függvénytörzs befejezõdése elõtt definiálni kell.

Több programozási nyelvtõl eltérõen az Octave-ban lehetõség van olyan függvény definiálására, amelynek több visszatérési értéke is van:

function [ret-list] = name (arg-list) body endfunction

ahol a ret-list a visszatérítendõ értékeket tartalmazó változók neveinek listája, melyek közt szerepelhetnek adatstruktúra részek is. Ezek bármely más változóval megegyezõ módon indexelhetõek.

Példa egy ilyen több visszatérési értékkel rendelkezõ függvényre:

function [max, idx] = vmax (v) idx = 1; max = v (idx); for i = 2:length (v) if (v (i) > max) max = v (i); idx = i; endif endfor endfunction

Az Octave képes meghatározatlan számosságú argumentum listát illetve visszatérési érték listát kezelni. Ez azt jelenti, hogy egy (...)-al jelölt üres listát írunk a megfelelõ lista helyére, s a függvény hívása után dõl el ennek tartalma. Ilyen esetekben beépített segédfüggvények segítségével határozhatjuk meg az argumentumok értékét, számát (nargout, va_start(), va_arg(), stb)

Octave-ban csak érték szerinti paraméterátadás van, vagyis minden paraméterrõl egy helyi másolat jön létre. Ez azt jelenti, hogy a függvények paramétereinek értékét nem lehet direkt módon a hívott függvényben megváltoztatni. Ennek ellenére a fügvények esetén az értékek nem lesznek szükségtelenül lemásolva. Például:

x = rand (1000); f (x);

esetében nem hoz létre két 1000 elemû mátrixot, ha az f nem változtatja az argumentuma értékét.

Függvények dokumentálása

Az Octave lehetőséget ad függvények szabványos dokumentálására. A függvényt tartalmazó fájl elején, ## kezdetű sorokban kommentként egy copyright szerepelhet, majd egy üres sor után hasonló módon a függvény dokumentációja. Ha az első összefüggő kommentezett rész nem tartalmazza a Copyright szót, akkor azt tekinti az Octave a függvény dokumentációjának.

Ezek után következhet még több sor fejléc, amely ## fejlécnév: kezdetű sorokból áll, ahol a fejlécnév lehet például Author, amely után értelemszerűen a szerző neve szerepel. Szabványos fejlécnevek még:

Maintainer: a neve és elérhetősége annak, aki az adott függvényért felel, akit probléma esetén keresni lehet.

Created: fájl létrehozásának dátuma.

Version: verziószám.

Keywords: függvény funkciójához kapcsolódó kulcsszavak.

Az ilyen dokumentáció a beépített függvények dokumentációjához hasonlóan elérhető a help paranccsal.

Egy példa:

## Copyright (C) 1996, 1997, 2007 John W. Eaton ## ## This file is part of Octave. ## ## Octave is free software; you can redistribute it and/or ## modify it under the terms of the GNU General Public ## License as published by the Free Software Foundation; ## either version 3 of the License, or (at your option) any ## later version. ## ## Octave is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied ## warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ## PURPOSE. See the GNU General Public License for more ## details. ## ## You should have received a copy of the GNU General Public ## License along with Octave; see the file COPYING. If not, ## see <http://www.gnu.org/licenses/>. ## usage: [IN, OUT, PID] = popen2 (COMMAND, ARGS) ## ## Start a subprocess with two-way communication. COMMAND ## specifies the name of the command to start. ARGS is an ## array of strings containing options for COMMAND. IN and ## OUT are the file ids of the input and streams for the ## subprocess, and PID is the process id of the subprocess, ## or -1 if COMMAND could not be executed. ## ## Example: ## ## [in, out, pid] = popen2 ("sort", "-nr"); ## fputs (in, "these\nare\nsome\nstrings\n"); ## fclose (in); ## while (ischar (s = fgets (out))) ## fputs (stdout, s); ## endwhile ## fclose (out); ## Author: jwe ## Keywords: subprocesses input-output ## Maintainer: John W. Eaton <jwe@octave.org>