Форум: "Начинающим";
Текущий архив: 2011.05.22;
Скачать: [xml.tar.bz2];
ВнизПытался сравнить переменную с функцией изменяющей её значение :( Найти похожие ветки
← →
Студент (2011-02-08 20:08) [0]Это снова я... Как всегда с безумными алогичными задумками... :)
Var Tb: Integer; // глобальные, хотя можно и в поле TForm (у меня его просто нету)
// .....
Function ChangeTb(t: Integer): Integer;
Begin
Case t Of
// .....
Tb:=Tb+10; // может поменять глобальную переменную, а может и нет (по ситуации)
// .....
Result:=Tb; // но всегда возвращает так
End;
// .....
Inc(Time); // or something like this...
If Tb<>ChangeTb(Time) Then // вот что с чем оно сравнивать будет? или так делать в принципе плохая идея? мне как бы нужно сравнивать старое с новым...
Begin
// .....
End;
Проверял на Д7 - не срабатывает как планировалось... Видимо оно сначала выполняет функцию а уже потом берёт значение Tb (уже изменённое)... Придётся всё-таки через дополнительную переменную?((
Оно может зависеть от настроек и версии компилятора?
← →
И. Павел © (2011-02-08 20:14) [1]Ну разумеется сначала выполнится функция, а уже потом проверится неравенство. Как же неравенство будет проверяться, пока не выполнится функция? И настройки компилятора тут совершено ни при чем.
← →
Студент (2011-02-08 20:21) [2]Ну... Я предполагал что он возьмёт старое глобальное значение по указателю или как там, запихнёт его в какой-нить регистр, потом push его с остальными в стек и вызовет функцию... Потом получит возврат функции (в eax или где там) и pop восстановив регистры сравнит со старым...
Как-то так... %)
м... "Придётся вручную..." (с)
← →
И. Павел © (2011-02-08 20:25) [3]Почему бы не перенести операцию сравнения прямо в функцию ChangeTB: а результат возвращать булевой переменой?
← →
И. Павел © (2011-02-08 20:26) [4]
Function ChangeTb(t: Integer): boolean;
var pastTb: integer;
Begin
pastTB := TB;
Case t Of
// .....
Tb:=Tb+10; // может поменять глобальную переменную, а может и нет (по ситуации)
// .....
Result:=Tb <> pastTB; // но всегда возвращает так
End;
← →
И. Павел © (2011-02-08 20:31) [5]Хотя лучше не использовать глобальные переменные там, где это возможно:
function ChangeTb(pastTB, t: integer): integer;
begin
...
result := newTB;
end;
← →
Студент (2011-02-08 20:53) [6]Хм... Спасибо, будем думать в этом направлении...)
Но эту переменную не представляю как не делать глобальной, она везде нужна...
← →
Servy © (2011-02-09 00:36) [7]
> Но эту переменную не представляю как не делать глобальной,
> она везде нужна...
А когда-нибудь вам возможно захочется считать параллельно в двух потоках, имея в каждом свой Tb. Или позволить пользователю иметь несколько дочерних окошек (аля вкладок в браузере), на каждом из которых что-то тикает со своим Tb. Или разделить приложение на клиента и сервера, так, что в каждом будет свой Tb, но клиентский Tb будет синхронизироваться с серверным; однако, оставляя возможность запустить и серверную и клиентскую части в рамках одного процесса.
Если какой-то из подобных сценариев возможен (то есть, Tb может таки стать не единственным), то стоит подумать над тем, чтобы оформить Tb и процедуры по работе с ним в класс. В противном случае, можно оставить и так, но довольно часто есть возможность, что то, что сейчас представлено в одном экземпляре, в будущем понадобится в нескольких. Разумно писать код так, чтобы потом не пришлось переписывать ^_^.
Кстати, если вы поделитесь с нами, зачем нужно это Tb и что вы такое в общих чертах пишите, то вам наверняка смогут помочь более конкретными советами в том, как это лучше оформить.
← →
Студент (2011-02-09 01:12) [8]Я уже сделал чтоб ChangeTb возвращала False если не изменяла Tb и True в противном случае... Борюсь с лишними перерисовками окна...
Несколько их в данном случае точно не понадобится... А с потоками я ещё не работал, не требовалось как-то покачто...)
> оформить Tb и процедуры по работе с ним в класс
Знаете... У меня сейчас такой период... Я теперь против классов, не люблю когда всё слишком удобно/легко...
Мои последние проекты написаны на чистом win32api без единого класса... %)
Знающие говорят что я скоро одумаюсь..... Не знаю, не знаю, но в любом случае для накопления опыта полезно на чистом api посидеть... ^__^
← →
Servy © (2011-02-09 01:45) [9]
> Мои последние проекты написаны на чистом win32api без единого
> класса...
> Знающие говорят что я скоро одумаюсь
Если всю жизнь для себя будет писать, и никогда за денежку, то тогда может и не пройти.
Большинству заказчиков пофиг, весит твой exe 100 Кб или 10 Мб, и задумываться ли при нажатии на кнопку на 2 или на 200мс. А вот то, что с помощью ООП он будет написан в 5 раз быстрее (а зачастую и стабильнее) - это важно, это его стоимость существенно сокращает.
Есть сферы, где борьба и за 5% ресурсов оправдана (некоторые игры, некоторые драйверы, действительно масштабные системы типа гугла, где 5% производительности означает экономию нескольких серверов со стоимостью в несколько килобаксов), но их не так уж много. Гораздо важнее, как правило, стабильность работы и скорость написания.
← →
sniknik © (2011-02-09 08:18) [10]> Знающие говорят что я скоро одумаюсь.....
может и нет, может просто "вымрешь" как невостребованный программист...
вероятность того, что попадешь в область где требуется исключительно winapi - 0 целых х.. десятых.
для толчка в "одумывании" просто попробуй найти работу... к примеру, я начал работать программистом на 3-м курсе, причем с базами... что мне тогда совсем не нравилось (писал игры на асме, и "умилялся" на их размер... ага, "шедевр" был игра в 800-900 байт "слизанная" с другой в 120-130кб... но пока доделал, быстро, где-то недели за 3-4, в старую уже наигрались и забыли.).
← →
Студент (2011-02-10 16:19) [11]
> Есть сферы, где борьба и за 5% ресурсов оправдана
Хочу... %)
> (писал игры на асме, и "умилялся" на их размер... ага, "шедевр"
> был игра в 800-900 байт "слизанная" с другой в 120-130кб.
> .. но пока доделал, быстро, где-то недели за 3-4, в старую
> уже наигрались и забыли.)
О___О
Покажите? ^__^
← →
sniknik © (2011-02-10 21:01) [12]> Покажите? ^__^
а комп у тебя потянет? это ж не просто так, это DOS нужен, реальный... не из всяких комбобоксов. текстовый режим, а не эмуляция в окошке. да и то, без гарантий.
:)
не парься. все давно потеряно, если, что и могло остаться то только из "лаб", а не "вольные художества".
← →
Студент (2011-02-10 21:24) [13]У меня есть такой комп что музеи позавидуют... Dos+VC... Любые древние игры идут... :)
← →
KSergey © (2011-02-11 10:03) [14]Почему-то все студенты (в хорошем смысле) бьются за байты, биты.... мозг где-то тренирует, но когда сталкиваешься с реальными бизнес-задачами, которых 99 процентов в этом мире - как-то уже все это не важно сорвершенно становится, т.к. сложность мироустройства поглощает тебя полностью в попытках хоть как-то это мироустройство познать :)
Хотя, конечно, наверняка есть задачи, требующие именно вылизывания до байтов, но это слишком штучные задачи.
Как правило стабильность кода, поддерживаемость и возможность развивать его - много важнее. Даже в мобильных устройствах уже.
← →
Anatoly Podgoretsky © (2011-02-11 12:30) [15]Я недавно, клон РК-86 выкинул, даже два.
← →
Anatoly Podgoretsky © (2011-02-11 12:31) [16]> KSergey (11.02.2011 10:03:14) [14]
Не фига себе мобильные устройства с 32 гб на борту, не много больших ящиков
это имеют.
← →
Плохиш © (2011-02-11 22:24) [17]
> Не фига себе мобильные устройства с 32 гб на борту
Так это не ram, а накопитель.
← →
Игорь Шевченко © (2011-02-11 22:49) [18]
> Я недавно, клон РК-86 выкинул, даже два.
второй сам отпочковался ? :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.05.22;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.003 c