Вверх ↑
Этот топик читают: Гость
Ответов: 9906
Рейтинг: 351
#16: 2006-10-16 13:33:14 ЛС | профиль | цитата
Мне представляется не лучше, потому-что в строке
    NList.AddObject(Name,cardinal(Result));
- лучше бы уже иметь LowerCase ИМХО, конечно...
карма: 9

0
Ответов: 262
Рейтинг: 6
#17: 2006-10-16 13:46:49 ЛС | профиль | цитата
Galkov, ну ну, представь, пишешь ты кодом, сочиняешь разные имена переменным - TParamMyLoveVariable, а "добрая" среда превращает не спрашивая в абсолютно не читаемое tparammylovevariable. Где ж такое видано?
карма: 0

0
Ответов: 9906
Рейтинг: 351
#18: 2006-10-16 13:59:05 ЛС | профиль | цитата
Дык в паскале, вестимо
И не среда, а коды, скажем...
Лично мне больше нравится Case-Sensitive вариант (как в Fasm, к примеру), но не я же это придумывал.
В этом случае еще проще - выкидываем лишнее напрочь (это я про после своих упрощений).
function ForceGVar(const Name:string):PData;
var i:integer;
begin
Result := nil;
if Name=' then exit;
i := NList.IndexOf(Name);
if i>=0 then
Result := PData(NList.Objects[i])
else begin
new(Result);
dtNull(Result^);
NList.AddObject(Name,cardinal(Result));
end;
end;
И радуемся Я - ЗА, у меня все будет продолжать работать

Редактировалось 1 раз(а), последний 2016-11-23 01:25:51
карма: 9

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#19: 2006-10-16 14:23:54 ЛС | профиль | цитата
Chesh, а оно кому надо, как оно внутри среды представляется? Мы всеравно не вытаскиваем это имя из среды.

[size=-2]------ Добавлено в 14:23
И все же, делаем Case-Sensitive, или оставляем NoCase?
карма: 22

0
Ответов: 262
Рейтинг: 6
#20: 2006-10-16 14:25:23 ЛС | профиль | цитата
Galkov, это жестоко
nesco, скажем а вдруг хороший человек напишет компонент GVarNames который будет выдавать список имен глобальных переменных. Тут то все и вылезет
карма: 0

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#21: 2006-10-16 14:43:47 ЛС | профиль | цитата
Chesh, а это идея. А что, если эту идею воткнуть в GlobalVar? Заодно и посмотрим. Правда, ИМХО, Galkov не одобрит.
карма: 22

0
Ответов: 262
Рейтинг: 6
#22: 2006-10-16 14:46:29 ЛС | профиль | цитата
nesco, обращайтесь
карма: 0

0
Ответов: 9906
Рейтинг: 351
#23: 2006-10-16 18:23:15 ЛС | профиль | цитата
Собственно, проблема только одна: в сегодняшнем KOL_for_HiAsm нет метода TStrList.IndexOf_NoCase
А выложить в Upload элемент с ремаркой "нужен новый KOL" не есть гениальная идея...
Того же самого можно достигнуть исходными StrIComp и Find, конечно же. Но стоят ли эти навороты (в сравнении с вариантами из этого топика) достигаемого результата (помнить исходную строку, а сравнивать - NoCase) уже сомнения вызывают.
У меня
карма: 9

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#24: 2006-10-16 18:40:25 ЛС | профиль | цитата
Galkov, так я не понял. Исходя из написанного, то желательно оставить Case-Sensitive. Но исходный вариант таким не был, а как пользователи -- поймут, что им имя переменной придется писать точно, а если ошибутся, то расплодят кучу переменных в памяти, а результата не достигнут. Хуже того, будут лопатить прогу на предмет непонятной нечитаемости переменной.
Предлагаю оставить изначальный вариант:
function ForceGVar(const Name:string):PData;
var i:integer;
begin
Result := nil;
if Name=' then exit;
i := NList.IndexOf(LowerCase(Name));
if i>=0 then
Result := PData(NList.Objects[i])
else begin
new(Result);
dtNull(Result^);
NList.AddObject(LowerCase(Name),cardinal(Result));
end;
end;
карма: 22

0
Ответов: 9906
Рейтинг: 351
#25: 2006-10-16 18:55:53 ЛС | профиль | цитата
Парни, мое мнение не есть истина в последней инстанции.
Есть факты объективные - бага, например.
А есть субъективные - нравится/не нравится.

Согласен - проблем с совместимостью лучше своими руками не строить.
И ТО ЖЕ САМОЕ по функциональности (т.е., в определенной степени - субъективное мнение) делал бы так:
function ForceGVar(const Name:string):PData;
var i:integer;s:string;
begin
Result := nil;
if Name=' then exit;
s := LowerCase(Name);
i := NList.IndexOf(s);
if i>=0 then
Result := PData(NList.Objects[i])
else begin
new(Result);
dtNull(Result^);
NList.AddObject(s,cardinal(Result));
end;
end;
Аргументы: поскольку LowerCase есть таки какой-то труд, то пусть проц его делает один раз, а не два...


А там глядишь, новый KOL подоспеет... Хотя новые фичи из KOL-а, по прошлому опыту - года полтора расхлебываются

Редактировалось 1 раз(а), последний 2016-11-23 01:27:18
карма: 9

0
Администрация
Ответов: 15294
Рейтинг: 1518
#26: 2006-10-16 18:58:23 ЛС | профиль | цитата
Глубокую суть Case-Sensitive для переменных по-моему могут понять только истинные линуксойды и апологеты С и С++... Я бы посоветовал никогда не писать алгоритмы, чувствительные к регистру - польза нулевая, а проблем, как верно было замечено, не оберешься потом.
карма: 26
0
Ответов: 9906
Рейтинг: 351
#27: 2006-10-16 19:03:51 ЛС | профиль | цитата
Dilma, наверное ты прав: Fasm писал, видимо, истинный линуксойд
карма: 9

0
Администрация
Ответов: 15294
Рейтинг: 1518
#28: 2006-10-16 19:53:12 ЛС | профиль | цитата
Прав или нет, но если исходить из того, что операционные системы и языки пишуться для людей, а люди привыкли к тому, что скажем обезьяна и оБезЬяна (или ОБЕЗЬЯНА) это не два вида живодных, а один, то Case-Sensitive в таких вещах придумка более чем странная.

PS: Fasm не в счет - там сравнить две строки гораздо проще одной командой проца(а именно так там и сделано скорей всего), который знает только о последовательности байт, а на человеков ему совершенно плевать.
карма: 26
0
Ответов: 2125
Рейтинг: 159
#29: 2006-10-16 19:58:13 ЛС | профиль | цитата
Case-Sensitive к порядку приучает. А то у нас то PChar, то pChar, то pchar. Люди привыкли, что если написано "рыбкин" - то это прилагательное, а если "Рыбкин" - то фамилия.
карма: 1

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#30: 2006-10-16 20:10:13 ЛС | профиль | цитата
tsdima, но переменной внутри среды, превращенной в последовательность байт, сугубо плевать на то, будет она "рыбкин" или "Рыбкин". МЫ ЭТОГО ВСЕРАВНО НЕ УВИДИМ. Это же не интерфейс. Я полностью согласен с Dilma по этому вопросу.
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)