alexs писал(а):Я под макросом подразумевал inline-функцию
Тогда нужен исходный текст этой функции.
Или каждого нового типа надо писать новый экземпляр?
Модератор: Модераторы
alexs писал(а):Я под макросом подразумевал inline-функцию
alexs писал(а):а какже иначе
alexs писал(а):используеш - будь добр опиши
alexs писал(а):Чем больше ты делаеш всевозможных проверок и явных описаний - тем тебе же проще будет через некоторое время вспомнить - почему жто сделано имено так, и меньше вероятность ошибок.
Bonart писал(а):Простейшую ПЕРЕСТАНОВКУ оказывается надо отдельно описывать для КАЖДОГО типа
Bonart писал(а):Как я могу ошибиться в типе t в моем приеме? Ответ - НИКАК. А вот ТЫ - запросто
alexs писал(а):Объясни - в чём может быть ошибка которую не отловит компилятор?
alexs писал(а):Кстати, зная как программисты любят лбзывать временные переменные - есть вероятность следуюя твоейлогике (объявления переменной в коде) столкнуться с двойным использованием переменной с одним именем но с разным функционалом (типом).
if a > b then begin
t ::= a;
a := b;
b := t;
end;
write(t);
Bonart писал(а): А ты можешь указать для t другой тип
Bonart писал(а): Если, конечно, t не определена где-то ранее.
Bonart писал(а):Во-первых var - лишнее, т.к. явное указание типа уже признак определения, а не переприсваивания.
Bonart писал(а):Во-вторых temp изменять никто не собирается, а значит это не переменная, а константа.
Bonart писал(а):В-третьих, при изменении типов a и b придется менять и тип t, что в данном случае явно лишняя работа.
Bonart писал(а):Deepthroat писал(а):Т.е. для определения типа всех переменных, через которые описана a, надо определить тип всех переменных, через которые описаны все переменные, через которые описана a.
Ну и что? Компилятор с этим справится быстрее чем мы с набиванием пары символов.
Deepthroat писал(а):И насчет SWAP. А Generic не помошник? Расширить его применение на функции и все ОК
Deepthroat писал(а):Так тип обязателен?
alexs писал(а):отож, а если определена, и конструкция внутри блока посложнее?
Deepthroat писал(а):Константа на этапе компиляции заменяется на ее значение
alexs писал(а):И ещё, я даже оверлоадинг стараюсь не использовать - сразу пишу SwapInt, SwapStr - т.е. уже по имени процедуры видно что ты собираешся менять.
Deepthroat писал(а):Во-первых, эту "лишнюю" работу ты сделаешь один раз, а пожинать плоды будешь многократно при отладке.
Это тебе может понадобиться анализируя исходник узнать тип переменной.
Deepthroat писал(а):Ну и будешь искать долго и упорно, какой же тип имеет переменная.
Bonart писал(а): Там типы a b и t видны сразу и проблемы
Bonart писал(а): Я предлагаю переменные, локальные для блока
Bonart писал(а):Да-да, аж целую десятую долю секунды.
Bonart писал(а):За типами прежде всего должен следить компилятор. Алгоритм не должен зависеть от типа, если такая зависимость сама по себе не входит в его определение
alexs писал(а):ты аобще предлагаеш убрать объявление типа
alexs писал(а):ГДЕ БУДЕТ ЛЕГКО ВИДНО?
alexs писал(а):При объявлении перемнной в начале блока кода сложнее - выше уже есть код - теряется наглядность.
в нынешней нотаци паскаля я по крайней мере знаю - надо посомотрит - что у меня за переменная - смотри в начало кода процедуры/функции - а если всё это будет размазано по тексту? где смотреть?
alexs писал(а):Судя по твоим рассуждениям - ты не учитываеш возможность исследования кода, написанного тобой год назад, или вобше поддержания не твоего кода.
alexs писал(а):Так-то оно так, но от лишней подсказки я не буду отказываться ради красивых теорий
Более того, несложно можно сделать утилиту, которая по листингу компилятора сама расставит типы в исходниках.
//bla bla bla
var a := 0;
var x := 10;
//some program code
begin
var y := 7.5;
a := x + y;
end;
//a lot of code here
b: real := 789;
var y := round(b + a / 0.8);
//code, code, code
var z := (y + b) * 7;
Вернуться в Компилятор / язык программирования
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14