Форум: "Потрепаться";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
ВнизОтличие функции от процедуры Найти похожие ветки
← →
l4m3r (2005-12-21 17:55) [0]Привет!
вот я седня протупил. учительница по информатике вместо того чтоб нормально засчитать мне лабу решила вдруг спросить чем отличается функция от процедуры. я ответил что типа функция возвращает значение, а процедура нет (переменные с var не в счет). Она грит еще есь а я не могу вспомнить =(
← →
ПЛОВ © (2005-12-21 17:58) [1]названием еще, наверно - function и procedure :)
Глянь для общего развития С. Там только функции, прикинь!!! :)))
← →
alex_*** © (2005-12-21 18:27) [2]следствием того что ф-ция возвращает зн-ие, есть возможность использования её в выражениях. Может она это хотела услышать?
← →
Kerk © (2005-12-21 18:28) [3]l4m3r (21.12.05 17:55)
я ответил что типа функция возвращает значение, а процедура нет
Больше ничем.
← →
Digitman © (2005-12-21 18:34) [4]
> l4m3r
"Банан" по инф-ке тебе в любом случае светит.
Но у тебя ЗДЕСЬ есть шанс раз и навсегда разобраться и понять все что касается этой галиматьи (процедуры-функции какие-то там хреновы, мало-ли еще кто что выдумал ..) ..
← →
Джо © (2005-12-21 18:36) [5]Функция тоже может НЕ возвращать значение.
Вопрос на самом деле исключительно в синтаксисе конкретного языка, единого понятие нет.
← →
Kerk © (2005-12-21 18:38) [6]Джо © (21.12.05 18:36) [5]
Вопрос на самом деле исключительно в синтаксисе конкретного языка, единого понятие нет.
Эт. точно
Процедура - это функция, которая возвращает void :))
← →
Джо © (2005-12-21 18:51) [7]
> [6] Kerk © (21.12.05 18:38)
> Процедура - это функция, которая возвращает void :))
Итого, имеем: введение понятия "процедура" — это на самом деле введение лишней сущности, ибо хватает и функций, возвращающих void.
С другой стороны, имеем: введение понятия "void" — это также введение лишней сущности, ибо достаточно иметь функции и процедуры, без всяких лишних абстракций.
;->
← →
vrem (2005-12-21 18:56) [8]>Она грит еще есь а я не могу
Спросил бы в тот момент. Запоминается лучше :)
← →
l4m3r (2005-12-21 18:58) [9]наверное отвечу что функцию можно использовать в выражениях. пасиб за флейм ))
← →
Alexander Panov © (2005-12-21 19:02) [10]l4m3r (21.12.05 18:58) [9]
function b: Integer;
begin
Result := 2*2;
end;
procedure a(parm: Integer);
begin
ShowMessage(IntToStr(parm));
end;
Используем:a(b);
Процедура используется в выражении ;)
← →
Джо © (2005-12-21 19:03) [11]
> [9] l4m3r (21.12.05 18:58)
> наверное отвечу что функцию можно использовать в выражениях.
>
Хе-хе, процедуру тоже можно использовать в выражениях :P
← →
Джо © (2005-12-21 19:04) [12]И я тоже примерчик заготовил:
procedure Proc; begin end;
...
var
P: procedure;
...
P := Proc; // чем не выражение? ;)
← →
TUser © (2005-12-21 19:40) [13]Имхо - переживи такую училку. Ибо еще много таких будет.
← →
Igorek © (2005-12-21 20:07) [14]Функцию можно использовать как rvalue и lvalue. Процедуру - нет.
← →
Igorek © (2005-12-21 20:08) [15]+ как expression
← →
Джо © (2005-12-21 20:29) [16]
> [15] Igorek © (21.12.05 20:08)
> + как expression
См. [10], [12].
← →
Lamer@fools.ua © (2005-12-21 20:35) [17]>>Джо © (21.12.05 19:04) [12]
Это не процедура, а её адрес.
>Джо © (21.12.05 20:29) [16]
Ну и где там процедура как lvalue?
← →
Lamer@fools.ua © (2005-12-21 20:37) [18]Тьфу. Igorek меня запутал. Нельзя использовать функцию как lvalue.
← →
Джо © (2005-12-21 20:39) [19]
> [17] Lamer@fools.ua © (21.12.05 20:35)
> Это не процедура, а её адрес.
Операция взятия адреса (замаскированный @) — это, собственно, тоже можно расценивать как "выражение", не се па?
← →
Igorek © (2005-12-21 20:40) [20]
> Lamer@fools.ua © (21.12.05 20:37) [18]
Можно, если функция возвращает ссылочный тип.
← →
Lamer@fools.ua © (2005-12-21 20:47) [21]>>Igorek © (21.12.05 20:40) [20]
lvalue означает, AFAIR, нахождение слева от знака присваивания. Поэтом с трудом представляю, что Вы имеете в виду. Можно пример?
← →
Igorek © (2005-12-21 21:25) [22]
> Lamer@fools.ua © (21.12.05 20:47) [21]// cpp1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int& f(int& a){ return a; }
int _tmain(int argc, _TCHAR* argv[])
{
int a = 1;
cout << a;
f(a) = 2;
cout << a;
return 0;
}
← →
Lamer@fools.ua © (2005-12-21 21:50) [23]>>Igorek © (21.12.05 21:25) [22]
Понятно. C"шный изврат :-)
← →
Gero © (2005-12-21 22:54) [24]
> Digitman © (21.12.05 18:34)
> "Банан" по инф-ке тебе в любом случае светит.
Это еще почему?
← →
wicked © (2005-12-21 23:31) [25]> Lamer@fools.ua © (21.12.05 21:50) [23]
> >>Igorek © (21.12.05 21:25) [22]
> Понятно. C"шный изврат :-)
во первых, си++ - ный........
а во вторых, очень даже удобно - можно перегружать operator[] и иметь вполне цивильные конструкции без лишних извратов........ :-P
← →
Lamer@fools.ua © (2005-12-22 00:27) [26]>>wicked © (21.12.05 23:31) [25]
>во первых, си++ - ный........
Сипостинкрементный изврат... бр-р-р-р-р.
:-)
Хотя я и в Delphi могу извратиться:unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
FA: Integer;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function Test(var A: Integer): PInteger;
begin
Result := @A;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FA := 1;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Inc(Test(FA)^);
ShowMessage(IntToStr(FA));
end;
end.
:-~~~
;-)
>>Igorek © (21.12.05 21:25) [22]
>>wicked © (21.12.05 23:31) [25]
Кстати, это частный случай — когда возвращается ссылочное значение (или ссылка, как правильно?). В общем случае функция не может быть lvalue даже в C/C++, так? Или я опять ламерю?
← →
Marser © (2005-12-22 00:29) [27]
> Хотя я и в Delphi могу извратиться:
Только зачем? ;-)
← →
wicked © (2005-12-22 00:35) [28]
> Кстати, это частный случай — когда возвращается ссылочное
> значение (или ссылка, как правильно?). В общем случае функция
> не может быть lvalue даже в C/C++, так? Или я опять ламерю?
в общем случае, афаик, да, не может быть lvalue.... тут играет роль тип возвращаемого значения.... можно поэкспериментировать - функция как lvalue должна сработать при возврате ссылки или при перекрытом operator = у возвращаемого типа...... во втором случае - уже действительно изврат, хотя и небесполезный местами - можно реализовывать безымянные обьекты-прокси для выполнения всяких "подводных" нужных задач.....
← →
Lamer@fools.ua © (2005-12-22 07:52) [29]>>Marser © (22.12.05 00:29) [27]
Как зачем? Шоб доказать, шо C/C++ мастдай, а Delphi рулез ;o)
>>wicked © (22.12.05 00:35) [28]
Значит, я был прав в [18]. Нельзя ж ведь частные случаи каких-либо языков распостранять на определение в целом. Хотя подозреваю, что сабджевый вопрос вообще имеет смысл только для конкретного языка, поскольку в C/C++ и понятия-то такого нету "процедура", вроде.
>>Джо © (21.12.05 20:39) [19]
>Операция взятия адреса (замаскированный @) — это, собственно, тоже можно расценивать как "выражение", не се па?
Расценивать-то можно как угодно, только вот сама процедура тут и ни при чём, IMHO.
← →
Карелин Артем © (2005-12-22 08:08) [30]
> Digitman © (21.12.05 18:34) [4]
Просвети меня, я между ними разницы не вижу, кроме того, что процедура частный случай функции.
← →
Иван Шихалев © (2005-12-22 09:28) [31]До кучи:
В классическом Паскале функция может использоваться только в выражениях.
← →
Чапаев © (2005-12-22 11:45) [32]
> Просвети меня, я между ними разницы не вижу, кроме того,
> что процедура частный случай функции
Функция -- процедура, возвращающая единственное значение. То бишь функция -- частный случай процедуры.
← →
Igorek © (2005-12-22 13:57) [33]
> Lamer@fools.ua © (21.12.05 21:50) [23]
> >>Igorek © (21.12.05 21:25) [22]
>
> Понятно. C"шный изврат :-)
Это не Сишный изврат. Существует понятие "ссылочный тип". Поддеживается многими языками.
← →
Игорь Шевченко © (2005-12-22 14:08) [34]
> вот я седня протупил
Стране нужны дворники
← →
Igorek © (2005-12-22 15:06) [35]+
function GetButton: TButton; begin ... end;
...
GetButton.Caption := "blablabla";
Это уже другой случай - ссылка на обьект, а не на переменную.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.013 c