powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Улучшил FreeAndNil. Можете не благодарить.
25 сообщений из 226, страница 8 из 10
Улучшил FreeAndNil. Можете не благодарить.
    #39955152
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev
Вам на ночь глядя:
https://www.google.com/search?client=firefox-b-d&q=nick hodges freeandnil

Комментарий на рандомном сайте прикольный:
знаем, знаем. это тот ник, который учит всех не использовать FreeAndNil потому что “а зачем?”. баааальшой спец, которого даже из такой сомнительной конторы как эмбаркадеро поперли.:)
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955155
asviridenkov,

Ну всё правильно для JS если один node является строкой, то происходит concat. Притом, на стадии пред компиляции происходить проверка, является ли строка - строкой ? Или же это число, или что - то ещё.

Но вот для других языков 4 == "4text" будет = true так же как и 8 в сложение. Но вот если строка идёт спереди "text4", то она не является числом, и мы не можем получить concat в виде 44text и получаем просто 4


Это азы, это знать надо перед тем как начать программировать на языке (Уточнив приоритеты)
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955156
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный,

a+b <> b+a
ну да, все верно.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955158
asviridenkov,

javascript
44 == "44" = true
44 == "44d" = false

Возьмём к примеру php
44 == "44" = true
44 == "44d" = true
44 == "d44" = false

44 + "44" = 88
44 + "44d" = 88
44 + "d44" = 44

Для js будет понятно, что там в любом случае concat string
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955159
В lua к примеру со строкой вообще нельзя сравнить число, будет false
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955179
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, вы немного не в том направлении ушли :) Обсуждение той статьи заслуживает отдельной ветки, даже может быть и в разделе Delphi, но лучше - в разработка, я с ней полностью согласен, но это не тема топика. Ссылка была приведена только для главного посыла:авторПотому что это частный случай задачи коммивояжера — ты НИКОГДА не можешь предусмотреть все кейсы
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955299
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный

44 + "44" = 88
44 + "44d" = 88
44 + "d44" = 44

Пц... и на этом ещё пишут...
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955310
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

раз уж хочется об этом поговорить, можно вот еще пару тем глянуть :)
https://habr.com/ru/post/500098/
https://habr.com/ru/post/500822/
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955337
alekcvp
Пц... и на этом ещё пишут...


Нормально и пишут.Это никаких неудобств не доставляет, зная как с этим работать.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<?php
$foo = 1 + "10.5";                // $foo это float (11.5)
$foo = 1 + "-1.3e3";              // $foo это float (-1299)
$foo = 1 + "bob-1.3e3";           // $foo это integer (1)
$foo = 1 + "bob3";                // $foo это integer (1)
$foo = 1 + "10 Small Pigs";       // $foo это integer (11)
$foo = 4 + "10.2 Little Piggies"; // $foo это float (14.2)
$foo = "10.0 pigs " + 1;          // $foo это float (11)
$foo = "10.0 pigs " + 1.0;        // $foo это float (11)
?>



Это всё написанно на официальном сайте https://www.php.net/manual/ru/language.types.php
Ознакомление составляет 20 минут в среднем
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955339
Это всё написанно на официальном сайте https://www.php.net/manual/ru/language.types.php
Ознакомление составляет 20 минут в среднем[/quot]


Значение определяется по начальной части строки. Если строка начинается с верного числового значения, будет использовано это значение. Иначе значением будет 0 (ноль). Верное числовое значение - это одна или более цифр (могущих содержать десятичную точку), по желанию предваренных знаком с последующим необязательным показателем степени. Показатель степени - это 'e' или 'E' с последующими одной или более цифрами.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955344
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарищи, который топят против FreeAndNil почему-то считают, что если вы его используете - то это только потому, что структура кода требует его использовать. Иными словами, они считают, что если вы используете FreeAndNil - то у вас ужасная неразбериха в коде, вы сами не знаете область жизни ваших объектов.

И в этом они, конечно, правы. Видимость объектов нужно максимально сужать, код нужно упрощать, минимизируя зависимости. Но почему я не могу одновременно иметь нормальную архитектуру и при этом использовать FreeAndNil - мне не понятно.

Я подозреваю, что эти товарищи получили детскую травму, работая с подобным кодом. Это примерно как если бы вы работали с "лапшой на GOTO" и написали "Доводы против оператора GOTO". Просто когда другие читают такие опусы, они не вполне понимают, про что говорит автор, потому что никогда не видели подобного кода - ну и понимают сказанное слишком буквально ("удалите вообще это из языка"). Но я вот, к примеру, не видел на практике ни лапши на GOTO, ни FreeAndNil как затычки (да, может быть, мне повезло), зато видел множество случаев, когда и GOTO и FreeAndNil - уместны.

Аргумент: "если у вас правильная архитектура, то FreeAndNil не нужен". Да, не нужен, но никто же не запрещает. Как они собираются гарантировать "правильность" кода - мне не понятно. Человек склонен совершать ошибки. FreeAndNil - это машина, инструмент, она ошибок не делает. Его вызов не несёт каких-то накладных расходов, чтобы от него избавляться. У нас не так много отладочных инструментов, чтобы добровольно отказываться от них.

Также наблюдается некое двуличие. Многие аргументы "против FreeAndNil" применимы также и к Free. Действительно, очень часто достаточно просто Destroy. Почему анти-FreeAndNil товарищи не топят против Free? Когда вообще вы последний раз задумывались: "хм, а здесь нужен Free или достаточно Destroy?" А зачем тогда вы вообще задумываетесь "хм, а здесь нужен FreeAndNil или достаточно Free?"
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955372
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmoker
Товарищи, который топят против FreeAndNil почему-то считают, что

Товарищи, которые топят против FreeAndNil, считают, что в автомобиле пристёгивается только тот, кто не умеет водить. Ну а настоящим пацанам западло, корона спадает.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955379
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmoker
часто достаточно просто Destroy
так некоторые его и юзают где достаточно
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955383
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavan
GunSmoker
часто достаточно просто Destroy
так некоторые его и юзают где достаточно

Кстати, хороший вопрос для собеседования.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955394
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

Это только если вам на собеседовании нечем заняться.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955395
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmoker
Также наблюдается некое двуличие. Многие аргументы "против FreeAndNil" применимы также и к Free. Действительно, очень часто достаточно просто Destroy. Почему анти-FreeAndNil товарищи не топят против Free? Когда вообще вы последний раз задумывались: "хм, а здесь нужен Free или достаточно Destroy?" А зачем тогда вы вообще задумываетесь "хм, а здесь нужен FreeAndNil или достаточно Free?"
просто Free появился раньше, но оказался недостаточно хорош
а потом появилась ему замена, в виде FreeAndNil
практически Free уже не нужен, я не могу придумать ему адекватный кейс для применения
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955397
kv67
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan),

Код: pascal
1.
2.
3.
4.
5.
6.
with TSomeObject.Create do
try
  // много кода
finally
  Free;
end;
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955410
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kv67
kealon(Ruslan),

Код: pascal
1.
2.
3.
4.
5.
6.
with TSomeObject.Create do
try
  // много кода
finally
  Free;
end;



Код: pascal
1.
2.
3.
4.
5.
6.
with TSomeObject.Create do
try
  // много кода
finally
  Destroy;
end;
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955415
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)
kv67
kealon(Ruslan),

Код: pascal
1.
2.
3.
4.
5.
6.
with TSomeObject.Create do
try
  // много кода
finally
  Free;
end;




Код: pascal
1.
2.
3.
4.
5.
6.
with TSomeObject.Create do
try
  // много кода
finally
  Destroy;
end;

Delphi жыв!
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955418
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще у всего есть семантика и контракт. Кому это не важно, для того эти три варианта одинаковы. Кому важно, заботится о читаемости и логичности кода, для того эти три варианта существенно разные. Кто ты ? :)
Код: pascal
1.
2.
3.
4.
5.
6.
var
  LObj: TObject;
begin
  LObj := TObject.Create;
  LObj.Destroy;
end;


Код: pascal
1.
2.
3.
4.
5.
6.
var
  LObj: TObject;
begin
  LObj := TObject.Create;
  LObj.Free;
end;


Код: pascal
1.
2.
3.
4.
5.
6.
var
  LObj: TObject;
begin
  LObj := TObject.Create;
  FreeAndNil(LObj);
end;
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955423
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я - тот, кто заботится о качестве продукта. Поэтому в заданных условиях однозначно предпочту четвёртый вариант,

Код: pascal
1.
2.
3.
begin
  TObject.Create.Destroy;
end;
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955424
ЭМ.. Free проверяет существует ли объект, и вызывает Destroy

Так что не имеет никакого смысла вызывать Destroy.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955425
Кот шрёдингера он либо жив, либо мёртв. Никогда нельзя предугадать на 100% всего лишь на 99,999
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955426
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВсеРазумный
Так что не имеет никакого смысла вызывать Destroy.

Небольшой смысл всё же имеет. За него в коде цепляется глаз, поэтому если хочешь просигнализировать читателю "здесь что-то необычное", стоит предпочесть его Free - как, например, в моей предыдущей реплике.
...
Рейтинг: 0 / 0
Улучшил FreeAndNil. Можете не благодарить.
    #39955429
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Я - тот, кто заботится о качестве продукта. Поэтому в заданных условиях однозначно предпочту четвёртый вариант,

Код: pascal
1.
2.
3.
begin
  TObject.Create.Destroy;
end;


Уникальный путь нормален для России :)
...
Рейтинг: 0 / 0
25 сообщений из 226, страница 8 из 10
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Улучшил FreeAndNil. Можете не благодарить.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]