Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.05.22;
Скачать: CL | DM;

Вниз

как правильно описать функцию с разными выходами?   Найти похожие ветки 

 
novai   (2011-02-11 18:18) [0]

как правильно описать функцию? хочу так:
   function WhatButtonOn(AX, AY: integer): string;
   function WhatButtonOn(AX, AY: integer): integer;
не получается, пока сделал так:
   function WhatButtonOn(AX, AY: integer): string; overload;
   function WhatButtonOn(AX, AY: Smallint): Smallint; overload;
но не думаю, что это правильно, как правильно, или это не возможно?


 
И. Павел ©   (2011-02-11 18:20) [1]

А как вы собираетесь потом вызывать две одноименные функции с одинаковыми параметрами? :)


 
Palladin ©   (2011-02-11 18:24) [2]

procedure WhatButtonOn(AX, AY: integer; var r: String); overload;
procedure WhatButtonOn(AX, AY: integer; var r: integer); overload;


 
novai   (2011-02-11 18:27) [3]

думал компилятор сам решит когда что:
if WhatButtonOn(AX, AY: integer): = "блабла" then
или
if WhatButtonOn(AX, AY: integer): = 1 then


 
novai   (2011-02-11 18:28) [4]

Палладин, значит функцией нельзя?


 
И. Павел ©   (2011-02-11 18:39) [5]


> думал компилятор сам решит когда что:

Компилятор принимает такие решения на основе сигнатуры функции (это ее имя, типы передаваемых параметров и т.д.). Оператор "=", который к функции даже не относится, не может входить в ее сигнатуру.


 
Palladin ©   (2011-02-11 18:39) [6]

Тебе справку процитировать или сам в нее посмотришь?


 
И. Павел ©   (2011-02-11 18:40) [7]


>  не может входить в ее сигнатуру.

А жаль. Из за жесткой типизация такая перегрузка могла бы стать фишкой паскаля :)


 
novai   (2011-02-11 18:42) [8]


> Тебе справку процитировать

а что там именно? не понял о чем Вы?


 
sniknik ©   (2011-02-11 18:43) [9]

> функцией нельзя?
можно, разрешаю... хотя я не Palladin :(.

function WhatButtonOn(AX, AY: integer; const r: String): String; overload;
function WhatButtonOn(AX, AY: integer; r: integer): integer; overload;


 
Palladin ©   (2011-02-11 18:44) [10]

ну прежде чем на форум лезть неплохо было бы почитать справку по overload, не так ли? ведь только эта директива позволяет объявлять одноименные функции/процедуры/методы


 
sniknik ©   (2011-02-11 18:44) [11]

> такая перегрузка могла бы стать фишкой паскаля :)
с довеском в виде источника багов... т.к. добавляет неоднозначность.


 
Palladin ©   (2011-02-11 18:44) [12]


> sniknik ©   (11.02.11 18:43) [9]

а я и не запрещал )


 
novai   (2011-02-11 18:44) [13]


> function WhatButtonOn(AX, AY: integer; const r: String):
>  String; overload;
> function WhatButtonOn(AX, AY: integer; r: integer): integer;
>  overload;

так не интересно, лучше тогда процедурой... все понял, палладин отдельное спасибо


 
novai   (2011-02-11 18:46) [14]

справку я посмотрел
увидел:

function Divide(X, Y: Real): Real; overload;

begin
 Result := X/Y;
end;

function Divide(X, Y: Integer): Integer; overload;

begin
 Result := X div Y;
end;
и не обратил внимания на разные типы параметров( еще раз - спасибо!


 
novai   (2011-02-11 18:51) [15]

и всетаки можно сделать так:
 function WhatButtonOn(AX, AY: integer): string; overload;
 function WhatButtonOn(AX, AY: Smallint): Smallint; overload;
если Ax и АY гарантированно не выйдут за пределы smallint?


 
novai   (2011-02-11 19:09) [16]

и ax и ay я всегда перед вызовом буду приводить к Smallint?


 
sniknik ©   (2011-02-11 19:09) [17]

> и всетаки можно сделать так:
ну, я как опять не возражаю... делай!

p.s.
i:= WhatButtonOn(1, 2);
что вызовется?


 
Anatoly Podgoretsky ©   (2011-02-11 19:13) [18]

> novai  (11.02.2011 18:18:00)  [0]

Сам синтаксис правильный, а вот функции нет, это неодназначно, скажи какого
типа параметр 123? Параметры должны быть разными по типу и одназначными.


 
Anatoly Podgoretsky ©   (2011-02-11 19:14) [19]

> novai  (11.02.2011 18:27:03)  [3]

С чего бы, например

можно написать так S := func и просто func


 
Anatoly Podgoretsky ©   (2011-02-11 19:17) [20]

> Palladin  (11.02.2011 18:44:12)  [12]

А кто? Франк Борланд?


 
Anatoly Podgoretsky ©   (2011-02-11 19:18) [21]

> novai  (11.02.2011 18:51:15)  [15]

Опять не одназначные параметры


 
novai   (2011-02-11 21:03) [22]


> i:= WhatButtonOn(1, 2);
> что вызовется?

думал в замисимоcти от вызова вызовет s или i

> какого
> типа параметр 123

не понял, интегер или шортинт?

> Опять не одназначные параметры

да но с приведением, станут похожи если вызывать с приведением типа:
var
sX, sY: integer;
..
 
 function WhatButtonOn(Smallint(sy), Smallint(sy)): Smallint; overload;


 
novai   (2011-02-11 21:04) [23]


> > i:= WhatButtonOn(1, 2);
> > что вызовется?
>
> думал в замисимоcти от вызова вызовет s или i

те в местах вызова буду вызвать с нужным типом s или i...


 
И. Павел ©   (2011-02-11 21:05) [24]


>  function WhatButtonOn(Smallint(sy), Smallint(sy)): Smallint;
>  overload;

Но ведь такой громоздкий вызов функции сведет на нет все удобства перегрузки. ИМХО, легче уж разные имена использовать...


 
novai   (2011-02-11 21:08) [25]


> можно написать так S := func и просто func

не понял о чем речь...
ведь во втором случае мы теряем резулт( а мне не зачем его терять, тем более, хотелось бы, чтоб он было разного типа при одинаковых параметрах функции


 
novai   (2011-02-11 21:11) [26]


> сведет на нет все удобства перегрузки

можно на пальцах, что есть перезагрузка?

просто мне удобно вызывать функцию в разных местах программы с одинаковыми входными параметрами, но разными выходными...


 
И. Павел ©   (2011-02-11 22:03) [27]


> можно на пальцах, что есть перезагрузка?

http://256bit.ru/Delphi7/Glava1/Index9.html (обратите внимание: "Перегрузка методов нужна, чтобы произвести одинаковые или похожие действия с разнотипными данными.")

И еще: как прикажете компилятору обработать вот такое выражение:
if WhatButtonOn(1, 1) = WhatButtonOn(2, 2)


 
sniknik ©   (2011-02-11 22:14) [28]

> просто мне удобно вызывать функцию в разных местах программы с одинаковыми входными параметрами, но разными выходными...
это тебе только кажется, что удобно... вот представь, что ВСЕ функции в дельфи имеют одно название... кошмар какой, у тебя тот же кошмар только маленький, на 2х функциях незаметный. причем перекрывающийся из-за лени, неприятностью запоминать 2 слова вместо одного. но если подумать...


 
Anatoly Podgoretsky ©   (2011-02-12 10:21) [29]

> novai  (11.02.2011 21:08:25)  [25]

Какая разница, что мы делаем с результатом, вопрос что вызывать?
Или так proc1(func1(1, 2))
Учись мыслить шире


 
Anatoly Podgoretsky ©   (2011-02-12 10:23) [30]

> novai  (11.02.2011 21:11:26)  [26]

А где речь про перезагрузку, про что спрашиваешь, с какой целью, в каком
контексте, может ты Матрицу хочешь перезагрузить, или компьютер, или
программу, для функций это не применимо, а если и применимо, то это уже
рекурсия.


 
Anatoly Podgoretsky ©   (2011-02-12 10:25) [31]

> novai  (11.02.2011 21:11:26)  [26]

Я бы повесился, вот к чему приводит гонка за лидером. Не все что дозволено
Микрософту, хорошо для других



Страницы: 1 вся ветка

Текущий архив: 2011.05.22;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.01 c
2-1297684583
Den
2011-02-14 14:56
2011.05.22
Уменьшить размер памяти занимаемой приложением


2-1297096029
Женя
2011-02-07 19:27
2011.05.22
Распознание символов


2-1297808037
TempUser142
2011-02-16 01:13
2011.05.22
Вызов InternetSetStatusCallback из TThread


2-1297343945
cross
2011-02-10 16:19
2011.05.22
очистка IXMLDocument


2-1297334588
RUu
2011-02-10 13:43
2011.05.22
invalid pointer operation