Перейти к содержимому

Remove и delete в чем разница

  • автор:

Remove и delete в чем разница

Очень удобный класс для работы со списком объектов. Вот только не до конца понятный. Справка Delphi вводит в заблуждение, возникают вопросы. Выдержка из Help‘а:

Removes a specified object from the list and (if OwnsObjects is true) frees the object.

Delphi syntax:
function Remove(AObject: TObject): Integer;

C++ syntax:
HIDESBASE int __fastcall Remove(System::TObject* AObject);

Description
Call Remove to delete a specific object from the list when its index is unknown. The value returned is the index of the object in the Items array before it was removed. If the specified object is not found on the list, Remove returns –1. If OwnsObjects is true, Remove frees the object in addition to removing it from the list.

After an object is deleted, all the objects that follow it are moved up in index position and Count is decremented. If an object appears more than once on the list, Remove deletes only the first appearance. Hence, if OwnsObjects is true, removing an object that appears more than once results in empty object references later in the list.

To use an index position (rather than an object reference) to specify the object to be removed, call Delete.

Removes the item at the position given by the Index parameter.

Delphi syntax:
procedure Delete(Index: Integer);

C++ syntax:
void __fastcall Delete(int Index);

Description
Call Delete to remove the item at a specific position from the list. The index is zero-based, so the first item has an Index value of 0, the second item has an Index value of 1, and so on. Calling Delete moves up all items in the Items array that follow the deleted item, and reduces the Count.

To remove the reference to an item without deleting the entry from the Items array and changing the Count, set the Items property for Index to nil (Delphi) or NULL (C++).

Обратите внимание, что описание метода Delete дается для предка класса TObjectListTList, что добавляет путаницы. Еще примем во внимание примечание (Note) в описании метода и запутаемся окончательно.

Я обратился к этой теме по простой причине: у меня были проблемы с этими двумя методами, я не знал, какой из них использовать в определенных случаях.

Лучший способ разобраться в работе — обратиться к исходникам. Так и поступим.

Итак, что мы видим в исходниках метода Remove:

 function TObjectList.Remove(AObject: TObject): Integer; begin Result := inherited Remove(AObject); end;

То есть вызывается одноименный метод предка TList:

 function TObjectList.Remove(AObject: TObject): Integer; begin Result := IndexOf(Item); if Result >= 0 then Delete(Result); end;

Здесь, как мы видим, вызывается метод Delete, из чего можно заключить, что никакой разницы между методами Remove и Delete (кроме типа аргумента) нет. Но мы не будем останавливаться на этом, а пойдем дальше и посмотрим устройство метода TList.Delete:

 procedure TList.Delete(Index: Integer); var Temp: Pointer; begin if (Index < 0) or (Index >= FCount) then Error(@SListIndexError, Index); Temp := Items[Index]; Dec(FCount); if Index < FCount then System.Move(FList^[Index + 1], FList^[Index], (FCount - Index) * SizeOf(Pointer)); if Temp <> nil then Notify(Temp, lnDeleted); end;

Тут вызывается метод Notify, в котором, как мы сейчас убедимся, кроется вся хитрость класса TObjectList:

 procedure TList.Notify(Ptr: Pointer; Action: TListNotification); begin end; procedure TObjectList.Notify(Ptr: Pointer; Action: TListNotification); begin if OwnsObjects then if Action = lnDeleted then TObject(Ptr).Free; inherited Notify(Ptr, Action); end;

Так, мы убедились, что если свойство OwnsObjects объекта класса TObjectList установлено в True, то оба метода: и Delete, и Remove приводят к освобождению объекта, удаляемого из списка. Если OwnsObject = False, ни один из них не освобождает объект. По крайней мере я пришел к этому выводу именно так, через изучение исходников.

Для удаления объекта из списка без его освобождения необходимо использовать метод Extract.

Позже я нашел в справке подтверждение своих мыслей:

TObjectList maintains a list of (owned) objects.

Unit
Contnrs

Remove и delete в чем разница

Объясните пожалуйста тонкуюсемантическую грань между английскими словами Delete и Remove (ну ещё до кучи Erase) применительно к компьютерной терминологии.

Re: Delete vs. Remove

От: Кодт
Дата: 08.09.04 13:12
Оценка: 2 (1) +1

Здравствуйте, Денис Майдыковский, Вы писали:

ДМ>Объясните пожалуйста тонкуюсемантическую грань между английскими словами Delete и Remove (ну ещё до кучи Erase) применительно к компьютерной терминологии.

Имхо, дело обстоит так:

Существуют
* данные
* хранилище этих данных
* и ссылка на хранилище

Убить ссылку, сохранив данные — remove.
Убить данные, сохранив хранилище — erase.
Убить всё — delete.

Перекуём баги на фичи!
Re: Delete vs. Remove

От: Sinclair https://github.com/evilguest/
Дата: 08.09.04 16:20
Оценка: 1 (1) +2

Уйдемте отсюда, Румата! У вас слишком богатые погреба.

От: Валерий
Дата: 14.09.04 12:58
Оценка:

В SQL используется еще и DROP
Re: Delete vs. Remove

От: marx paul Провести онлайн-опрос
Дата: 14.09.04 22:03
Оценка:

Здравствуйте, Денис Майдыковский, Вы писали:

ДМ>Объясните пожалуйста тонкуюсемантическую грань между английскими словами Delete и Remove (ну ещё до кучи Erase) применительно к компьютерной терминологии.

Delete — удалить
Remove — убрать
Erase — стереть

а все оно едино
без контекста — все об уничтожении данных

Re[2]: Delete vs. Remove

От: Хороший Человек
Дата: 15.09.04 13:33
Оценка:

Здравствуйте, marx paul, Вы писали:

MP>Здравствуйте, Денис Майдыковский, Вы писали:

ДМ>>Объясните пожалуйста тонкуюсемантическую грань между английскими словами Delete и Remove (ну ещё до кучи Erase) применительно к компьютерной терминологии.

MP>Delete — удалить
MP>Remove — убрать
MP>Erase — стереть

MP>а все оно едино
MP>без контекста — все об уничтожении данных

Remove — можно так же рассматривать, как «Переместить»

Re[3]: Delete vs. Remove

От: Блудов Павел
Дата: 16.09.04 00:40
Оценка:

Здравствуйте, Хороший Человек, Вы писали:

ХЧ>Remove — можно так же рассматривать, как «Переместить»
А Лингво еще «Отдалить» предлагает.

Re[3]: Delete vs. Remove

От: marx paul Провести онлайн-опрос
Дата: 17.09.04 05:40
Оценка:

Здравствуйте, Хороший Человек, Вы писали:

MP>>Delete — удалить
MP>>Remove — убрать
MP>>Erase — стереть

ХЧ>Remove — можно так же рассматривать, как «Переместить»

да, но только в смысле «прочь»

Re[2]: Delete vs. Remove

От: Кирилл Осенков https://twitter.com/KirillOsenkov
Дата: 21.09.04 19:26
Оценка:

Здравствуйте, Кодт, Вы писали:

К>Убить ссылку, сохранив данные — remove.
К>Убить данные, сохранив хранилище — erase.
К>Убить всё — delete.
Согласен. Кодт, как всегда, четко мыслит

О себе еще скажу, что очистку хранилища называю скорее Clear, а Erase подсознательно отношу к очистке графических поверхностей. А по поводу Delete vs. Remove я для себя это так понимаю:

Слова ходят парами. Пара Add/Remove для добавления данных в конец хранилища, без явного указания места (как со множеством, когда индекс не важен), а пара Insert/Delete с явным указанием места, куда вставить. Примерно как разница между добавить/вставить и изъять/удалить.

Re: Delete vs. Remove

От: Аноним
Дата: 03.06.05 12:25
Оценка: -2

Здравствуйте, Денис Майдыковский, Вы писали:

ДМ>Объясните пожалуйста тонкуюсемантическую грань между английскими словами Delete и Remove (ну ещё до кучи Erase) применительно к компьютерной терминологии

DELETE — удалить
REMOVE — переместить (если файл не нужен больше в той.папке, откуда его копируют, то его лучше переместить, чтобы не возвращаться в папку и не использовать клавишу DELETE

Re[2]: Delete vs. Remove

От: Блудов Павел
Дата: 06.06.05 05:08
Оценка:

Здравствуйте, <Аноним>, Вы писали:

А>REMOVE — переместить

Скорее, MOVE это переместить. REMOVE это «изъять».

Re: Delete vs. Remove

От: Mishka
Дата: 06.06.05 09:18
Оценка:

Здравствуйте, Денис Майдыковский, Вы писали:

ДМ>Объясните пожалуйста тонкуюсемантическую грань между английскими словами Delete и Remove (ну ещё до кучи Erase) применительно к компьютерной терминологии.

Так сказать на уровне подсознания
Delete — никогда не слышал использования за пределами компьютерных кругов. То бишь удалить что-то из компьютера.
Remove — воспринимаю как movе, нечто связанное с движением. Изъять что-то откуда-то, то есть, просто переместить нечто с того места где оно было куда-нибудь в другое место (и возможно уничтожить). Кстати, removals — это фирмы, занимающиеся перевозкой.
Erase — стереть. И точка

Ещё есть: take/put away/out, clean, obliterate, obliviate ( ) и пр.

Re[2]: Delete vs. Remove

От: Аноним
Дата: 09.06.05 12:15
Оценка:

Здравствуйте, Mishka, Вы писали:

M>Здравствуйте, Денис Майдыковский, Вы писали:

ДМ>>Объясните пожалуйста тонкуюсемантическую грань между английскими словами Delete и Remove (ну ещё до кучи Erase) применительно к компьютерной терминологии.
M>Remove — воспринимаю как movе, нечто связанное с движением. Изъять что-то откуда-то, то есть, просто переместить нечто с того места где оно было куда-нибудь в другое место (и возможно уничтожить).

Для remove хорошо подходит слово «убрать» — столь же неопределенно.

Re[3]: Delete vs. Remove

От: adontz http://adontz.wordpress.com/
Дата: 09.06.05 18:48
Оценка:

Здравствуйте, Блудов Павел, Вы писали:

БП>Скорее, MOVE это переместить. REMOVE это «изъять».

Думаю remove это «переместить повторно»

A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Delete vs. Remove

От: Муравей http://www.livejournal.com/users/podovan/
Дата: 14.06.05 16:47
Оценка:

Здравствуйте, Денис Майдыковский, Вы писали:

ДМ>Объясните пожалуйста тонкуюсемантическую грань между английскими словами Delete и Remove (ну ещё до кучи Erase) применительно к компьютерной терминологии.

delete — вааще!
remove — отсюдага!

The whole problem with the world is that fools and fanatics are always so certain of themselves, but wiser people so full of doubts.
Bertrand Russell (c)

В чем разница между delete и remove?

Delete — это что-то вроде уничтожить и очень часто относится к компьютерам.

Remove — это как двигать что-то, это скорее на английском как «take it away», то есть как убрать откуда-то.

Остальные ответы
Remove — отменить действие
Delete — удалить
Παν μέτρον άριστονМыслитель (9566) 4 года назад
undo — отменить действие
удалить или обновить
1 1Просветленный (21325) 7 лет назад

Вычеркнуть и удалить.
Delete — вычеркнуть.
Remove — удалить.
Erase — стереть.

Что там сверху городят.

Mark ShorПросветленный (48601) 7 лет назад
У вас на клавиатуре есть клавиша Delete.
Она что, вычеркивает? По-мому как раз удаляет.
Дмитрий Абрамов Просветленный (47587) Про язык английский речь, а не про клавиши.

В ms-dos были функции delete — удалить один файл или пустую папку и erase — удалить несколько файлов или папку с файлами и поддиректориями.
Всё зависит от контекста применения. По сути remove может выступать в том же значении, что erase (групповое удаление).

delete-to take, rub,cut down( esp.words)
remove — 1 to take away from a place; get rid of -(remove your hat; remove a child from a class; remove mud from your shoes;);2-to dismiss-That officer must be removed(from his position)

Delete — удалить в смысле стереть.

Remove — удалить в смысле переместить куда-то с глаз долой.

Delete — удалить навсегда

Remove — удалить отсюда и переместить в другой место.

Как я заметил, разницы особой и нет. В одной программе когда нажимаешь на «Delete» Выводится сообщение «Do you really want to delete this archive» и кнопки «Cancel» и «Remove»

Difference between «delete» and «remove» [closed]

This question is too basic; it can be definitively and permanently answered by a single link to a standard internet reference source designed specifically to find that type of information.

Closed 12 years ago .

I am writing a mobile application that will, as a part of its functionality, display a list of recorded thoughts. Now I am deciding the textual content of the menus and that left me thinking whether there is a logical difference between words remove and delete. Which one is more appropriate when speaking about taking an item off the list? I guess remove is, but why?

97.1k 39 39 gold badges 309 309 silver badges 401 401 bronze badges
asked Dec 21, 2011 at 20:19
Maxim V. Pavlov Maxim V. Pavlov
1,795 6 6 gold badges 18 18 silver badges 18 18 bronze badges

General reference works are often poor at helping readers distinguish between fine shades of meaning. In addition, the number of upvotes indicates that this question holds clear value for the community. It should be reopened.

Jan 31, 2014 at 22:16

3 Answers 3

Delete and remove are defined quite similarly, but the main difference between them is that delete means erase (i.e. rendered nonexistent or nonrecoverable), while remove connotes take away and set aside (but kept in existence).

In your example, if the item is existent after the removal, just say remove, but if it ceases to exist, say delete.

As a side note: delete is sometimes used of computer files to mean move to trash/recycle bin (hence it is still recoverable), but that’s not a standard meaning outside of that context.

answered Dec 21, 2011 at 20:22
57.4k 76 76 gold badges 260 260 silver badges 379 379 bronze badges
Thank you. Since I am removing item for good, I am going to use delete as a menu item word.
Dec 21, 2011 at 21:44

I use the excellent foobar2000 to look after my pc-based music library. Mostly because of its almost limitless configurability, but a major pluspoint is Foobar lets me have lots of customised «playlists». Any given track only «physically?» exists in one location on my hard drives, but it may appear in several playlists. Foobar has a «File operations» submenu where you can «really, permanently» Delete a track, but if you change your mind about having it in a particular playlist, that option is called Remove. That makes a lot of sense to me.

Dec 21, 2011 at 22:51

I had it kind of backwards considering that in computing, there is a notion of undelete but no unremove, i.e. deletion can be undone but removal cannot. To me, remove meant to physically move sth. away from access (make it eventually inaccessible) and delete would mean to make sth.logically inaccessible. OTOH, removing could be undone, like removing a plate from a table. Guess it’s ambiguous like synchronous (1. concurrent or 2. serial execution, respectively) & asynchronous in computing ? Synchronous: 1) at the same time, in parallel; 2) synchronized, serialized.

Feb 5, 2014 at 15:03

I think the «delete» operation of modern OSes is a historical reason before the «trash» thing. i.e MS-DOS didn’t have this 2-step» remove->deletion of files. it was only delete from the FAT, but it was possibly undelete because the raw data on the disk were not already overwritten (it’s still true today with modern OSes). In modern OSes now is just a 2-phase «delete», 1.remove (move to trash/ prepare for deletion); 2. physically delete from the file system. It’s still valid the undelete operation until the physical sector of disk are not overwritten.

Dec 17, 2014 at 13:08

The first sentence of this post is essentially identical to the one at labor.ny.gov/ux/design-remove-vs-delete.html. I trust you have authored the text at ny.gov, and that it isn’t a case of plagiarism?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *