english version while1 - stránky o programování

Návratová hodnota funkce

Popis

  • funkce - podprogram s návratovou hodnotou
  • procedura - podprogram bez návratové hodnotou

Vývojový diagram

Přirozený jazyk

JSA

NASM

  • Návratovou hodnotu lze předávat v zásobníku, v registrech nebo uložením do paměti.


předání návratové hodnoty (použita knihovna proc.asm)[ hodnota.asm ]
; funkce n-te mocniny
;  + parametry (zaklad, exponent) predane zasobnikem
;  + navratova hodnota funkce predana zasobnikem

bits 16

%include "proc.asm" ;pripojeni procedur

segment code 
;----------------------------------------------------------------------------
;  mocnina : vypocet n-te mocniny  
;----------------------------------------------------------------------------
   mocnina:
      push bp
      mov  bp, sp ; adresovani parametru od vrcholu zasobniku
      pusha
      
      mov bx, [bp+10] ; zaklad (bx)
      mov cx, [bp+8]  ; exponent (cx)      
      les di, [bp+4]  ; nacteni adresy navratove hodnoty (bp+4, bp+6)
      
; vypocet mocniny 1*(bx)*(bx)*....
      mov ax, 1
      jcxz ENDFOR
FOR      
      mul bx
      loop FOR
ENDFOR:

      mov [es:di], ax ; ulozeni vysledku do navratove hodnoty

      popa
      pop bp      
      ret 8      ; navrat do programu 
                 ; s odebranim parametru 8B - odebira volany
;----------------------------------------------------------------------------	

..start: 
  mov ax, data	
  mov ds, ax 
  mov ax, stack 
  mov ss, ax 
  mov sp, stacktop

; predani parametru zasobnikem
  push word [A]
  push word [E]
  push word seg navratH ;predani adresy navratove hodnoty
  push word navratH  
  call mocnina  ; volani podprogramu

  mov  ax, [navratH] ; hodnota pro tisk
  call printw        ; vypis navracene hodnoty (ax -> 0..65535)
  
  call printnl ; novy radek
  call press   ; cekej na stisk klavesy


; navrat do OS
  mov ah, 4ch  
  int 21h


	segment data
A          dw   2   ;zaklad
E          dw   10  ;exponent
navratH    resw 1   ;vyhrazeni pameti pro navratovou hodnotu

Pascal

  • Funkce function max(a,b:integer):integer; s návratovou hodnotou : identifikátor funkce max je deklarován jako typ integer ... ):integer;.
  • Funkce musí obsahovat alespoň jedno přiřazení do svého identifikátoru pro předání návratové hodnoty max := výraz.
  • Návratovým typem smějí být pouze nestrukturované typy.
  • Použití ve výrazech (zápisem).

C/C++

  • typ identifikátor (seznam parametrů) { return výraz } Funkce s deklarovaným typem musí obsahovat alespoň jeden příkaz return výraz pro předání návratové hodnoty.
  • void identifikátor (seznam parametrů) { } Funkce s deklarovaným typem void je bez návratové hodnoty. Pro její předčasné ukončení lze použít příkaz return.


funkce[ funkce.cpp ]
/* funkce */

#include <stdio.h> /* knihovna s funkci printf() */

/* 
 * deklarace funkce mocnina 
 * je i soucasti nasledujici definice
 */
int mocnina (int n, int e);

/*
 * definice funkce mocnina
 * parametr (e) s implicitni hodnotou 2
 */
int mocnina (int n, int e=2) {
   printf(" mocnina(%d, %d)", n, e);       
   int r = 1;  /* lokalni promenna */
   
   while(e--) {
     r = r*n;
   }      
   
   return r; /* navraceni hodnoty */
}

/*
 * funkce bez navratove hodnoty a parametru
 */
void info () {
    printf(" program: mocnina \n");
}

/*
 * hlavni funkce main
 */
int main (int argc, char *argv[]) {
   info();
   printf(" = %d \n", mocnina(3));
   printf(" = %d \n", mocnina(3,3));
   
   return 0;
}

Java

  • typ identifikátor (seznam parametrů) { return výraz } Metoda s deklarovaným typem musí obsahovat alespoň jeden příkaz return výraz pro předání návratové hodnoty.
  • void identifikátor (seznam parametrů) { } Metoda s deklarovaným typem void je bez návratové hodnoty. Pro její předčasné ukončení lze použít příkaz return.

JavaScript

  • typ návratové hodnoty se neuvádí
  • return výraz pro předání návratové hodnoty


hodnota funkce[ hodnota.html ]
<html>            
  <head>
    <title>Návratová hodnota funkce</title>
  </head>
  
  <body>
    <script type="text/javascript">
      function reverse (str) { 
          var str2 = ''; // lokalni promenna
          
          for(i=str.length-1; i>=0; i--)
            str2 = str2 + str[i]; //pridavani znaku z konce (str) do (str2)
            
          return str2; // navraceni obraceneho retezce
      }
      
      var retezec  = 'javascript';
      document.write("obracenim ("+retezec+") je ("+reverse(retezec)+") <br/>");
    </script>
  </body>
</html>

Matlab

  • předání návratové hodnoty přiřazením výstupnímu parametru c
            function c = plus(a, b)
            c = a+b;
  • funkce může mít i více návratových hodnot ([x,y]) zapsaných v seznamu výstupních parametrů
            function [x2,y2] = move(x, y, d)
            x2 = x + d;
            y2 = y + d;
  • nespecifikovaný počet výstupních parametrů
  • funkce bez návratové hodnoty function [] = print(a) nebo jenom function print(a)
  • funkce nargout pro zjištění počtu předaných výstupních parametrů

PHP

  • typ návratové hodnoty se neuvádí
  • return výraz pro předání návratové hodnoty


návratová hodnota funkce[ hodnota.php ]
<html>            
  <head>
    <title>Návratová hodnota funkce</title>
  </head>
  
  <body>
    <?php
        //zjisteni md5 hesla   
        // echo "md5('veslo') == ", md5('veslo'), "<br/>";  

        // funkce vraci (true) pokud bylo predano spravne heslo   
        function valid ($pwd) {
            if(md5($pwd) == '4bf643bf3816722ac9cbed5b6bb6c3c6')
               return true; //ukonceni podprogramu s hodnotou true

            return false; //ukonceni podprogramu s navratovou hodnotou false  
        }
        
        if(valid('veslo'))
           echo '<b> Vítejte ! </b>';
        else
           echo 'Přístup odepřen';
    ?>
  </body>
</html>

Kontakt
Prohlášení o dostupnosti
Tisk stránky
Autor: Václav Bubník © 2005
vbubnik@post.cz
XHTML 1.0| CSS