Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1297096029
Женя
2011-02-07 19:27
2011.05.22
Распознание символов


2-1297771744
well
2011-02-15 15:09
2011.05.22
TTreeView как выделить несколько узлов?


1-1245744723
dmitry_12_08_73
2009-06-23 12:12
2011.05.22
Как выделить нужный файл в открываемой папке?


2-1297680683
Евгений07
2011-02-14 13:51
2011.05.22
SendMessage WM_COPYDATA


1-1254923974
Agat2
2009-10-07 17:59
2011.05.22
из Delphi 2007 -> 2010





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский