Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];

Вниз

delphi = pascal = языки для начинающих   Найти похожие ветки 

 
Reindeer Moss Eater ©   (2007-11-14 17:46) [120]

Человеку дали великолепный механизм обработки исключений - и он от него отказался...

Ага. Исключения стали воспринимать как ошибки от которых надо избавляться.


 
Romkin ©   (2007-11-14 17:46) [121]


>  из всех нетривиальных методов(где стоит перехват исключений)
> возвращаю булевый код успеха. А по какой причине операция
> не выполнилась пользователя очень редко интересует, его
> интересует общий результат(Да/Нет). А лог ошибки поможет
> уже мне понять что у него на самом деле произошло.

Слушай, ты с Аксаптой, случайно, не работаешь? А то у меня друг ее администрит. И типовая ситуация - звонок "У нас терминал никак весы не найдет!" Шлют логи. Он перезванивает: "Сволочи, включите весы!!!"
Сейчас он их просто пингует, благо сетевые.


 
Канадец   (2007-11-14 17:47) [122]


> DiamondShark ©   (14.11.07 17:42) [118]


> Во-первых, это библиотечные штучки, а речь идёт о языке.


STL это неотъемлемая часть языка С++.


> Те же яйца, вид сбоку.


Поэтому я и написал "Это не совсем верно"


 
Черный Шаман   (2007-11-14 17:47) [123]


> pasha_golub ©   (14.11.07 17:31) [111]
> А пользователю можно показать красивую мордашку, мол не
> волнуйтесь, уважаемый. У нас тут внутре неонка барахлит,
>  так шо мы тут лог запишем, туда положим, а вы будьте добры
> по этому адресу его отправьте. И будет юзер довольный аки
> слон. Надеюсь :)


А создатели FF про это и не знали, поэтому они все некритические ошибки выводят во внутреннюю консоль, а не на экран.


 
mephasm   (2007-11-14 17:48) [124]

DiamondShark ©   (14.11.07 17:39) [115]

>Во-вторых, а что такое auto_ptr и shared_ptr? Экземпляры на стеке, в которые завёрнуты ссылки.

Вы забыли о вызове деструкторов полей объекта.


 
Игорь Шевченко ©   (2007-11-14 17:48) [125]

Romkin ©   (14.11.07 17:29) [109]

Исключение плохо тем, что его обработка нарушает простой и естественный ход программы. Также, как goto.

К тому же (это уже личное, наболевшее), с логикой, построенной на исключениях совершенно невозможно отлаживаться в среде, потому что нажатие кнопки F8 автоматически перемещает в то место, где возникло такое вот "логическое" исключение. И задавить его в среде тоже нельзя, потому что чать исключений такой класса нужно действительно обрабатывать, как исключения.


 
Piter ©   (2007-11-14 17:50) [126]

@!!ex ©   (14.11.07 17:19) [103]
Хм. в дельфе я всегда знаю, в какой момент будет удален объект


серьезно что ли? И в какой же момент?

Я то думал, что объект будет удален исключительно тогда, когда будет вызван деструктор объекта. Не раньше и не позже.

Точно также ресурсы можно освободить по вызову метода.


 
Reindeer Moss Eater ©   (2007-11-14 17:52) [127]

Исключение плохо тем, что его обработка нарушает простой и естественный ход программы. Также, как goto.

Ну if и case тоже нарушают простой ход программы.
Кроме того, исключение это совсем не goto куда-то там, а гоуту во вполне определенное место.


 
Игорь Шевченко ©   (2007-11-14 17:54) [128]


> Ну if и case тоже нарушают простой ход программы.


if и case как раз не нарушают.


 
Reindeer Moss Eater ©   (2007-11-14 17:58) [129]

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


 
homm ©   (2007-11-14 17:59) [130]

> [127] Reindeer Moss Eater ©   (14.11.07 17:52)
> Кроме того, исключение это совсем не goto куда-то там, а
> гоуту во вполне определенное место.

А у Вас гото всегда ведет кудато - там?


 
Reindeer Moss Eater ©   (2007-11-14 18:02) [131]

у меня вообще нет goto


 
J_f_S   (2007-11-14 18:03) [132]


> А у Вас гото всегда ведет кудато - там?

Гото может вести куда-то туда. Исключения всегда корректно раскручивают стек.


 
Palladin ©   (2007-11-14 18:03) [133]


> Reindeer Moss Eater ©   (14.11.07 17:52) [127]

стоп стоп... if и case не могут вывести процесс исполнения на шаг, алгоритмически стоящий, выше текущего... именно это и является "нарушением простого и естественного хода программы"... потому то дополнительные конструкции continue и break не являются "злом"...


 
Reindeer Moss Eater ©   (2007-11-14 18:05) [134]

if condition then exit;

if condition then abort;

if condition then raise;

одно и то же.

но в последнем случае еще и некий workaround выполняется в виде показа мессаджа.


 
Черный Шаман   (2007-11-14 18:05) [135]


> Romkin ©   (14.11.07 17:46) [121]
>
>
> >  из всех нетривиальных методов(где стоит перехват исключений)
> > возвращаю булевый код успеха. А по какой причине операция
> > не выполнилась пользователя очень редко интересует, его
> > интересует общий результат(Да/Нет). А лог ошибки поможет
> > уже мне понять что у него на самом деле произошло.
>
> Слушай, ты с Аксаптой, случайно, не работаешь? А то у меня
> друг ее администрит. И типовая ситуация - звонок "У нас
> терминал никак весы не найдет!" Шлют логи. Он перезванивает:
>  "Сволочи, включите весы!!!"
> Сейчас он их просто пингует, благо сетевые.
>


А как бы пользователю помог бы показ этих ошибок, которые совсем не мешают работе программы? Код старый, не мною писаный, который проще завернуть чем переделывать. Да и времени нет, аналог Aero нужно делать для полустеклянного интерфейса.


21.10.2007 20:27:27:984||TVMListView.SetItem List index out of bounds (0)
21.10.2007 20:27:27:984||TLoadIconsThreadObject.UpdateIcon List index out of bounds (0)
22.10.2007 02:46:11:046||TFileListView.StartMonitorChanges Length(PathList.PIDLs)<=0 TFileListView.StartMonitorChanges
22.10.2007 02:46:11:062||TVMListView.SetItem Access violation at address 0041CBB9 in module "VistaStartMenu.exe". Read of address 00000008
22.10.2007 02:46:11:062||TFileListView.BuildItemsList Access violation at address 0041CBB9 in module "VistaStartMenu.exe". Read of address 00000008
22.10.2007 02:46:11:062||TVMListView.GetItem Access violation at address 0041CBB9 in module "VistaStartMenu.exe". Read of address 00000008
22.10.2007 02:46:11:062||TVMListView.PlaceItems Access violation at address 0041CBB9 in module "VistaStartMenu.exe". Read of address 00000008
22.10.2007 02:46:11:062||TPupupListView.ContinunePopup Access violation at address 00000000. Read of address 00000000
22.10.2007 02:46:11:062||TVMListView.GetItem Access violation at address 0041CBB9 in module "VistaStartMenu.exe". Read of address 00000008
22.10.2007 02:46:11:062||TLoadIconsThreadObject.UpdateIconsForListView Access violation at address 0041CBB9 in module "VistaStartMenu.exe". Read of address 00000008


 
Reindeer Moss Eater ©   (2007-11-14 18:08) [136]

Черный Шаман  

так кроме шоумессаджа в блоке обработки можно и более полезный код писать.


 
DiamondShark ©   (2007-11-14 18:09) [137]


> mephasm   (14.11.07 17:48) [124]
> Вы забыли о вызове деструкторов полей объекта.

Точно, спасибо.
Но в данном случае непринципиально. Аналогов нет ни в Дельфи, ни, тем более, в жабе.


> Piter ©   (14.11.07 17:50) [126]
> Точно также ресурсы можно освободить по вызову метода.

Не, смотри. Пусть у нас есть контейнер, умеющий работать с каким-то абстрактным классом (вроде дельфийского TObjectList). Контейнер нифига не знает о том, используют ли содержащиеся в нём классы какие-либо ресурсы. Теперь мы напихаем в этот контейнер смесь экземпляров использующих и неиспользующих ресурсы, и отнимем возможность вызвать виртуальный деструктор.

Вот эта ситуация Зотова и пугает.

Зачем Зотову понадобилось пихать в обобщённый контейнер такую смесь  -- он ни за что не признается. С разработчика контейнера взятки гладки. А вот пользователь контейнера прекрасно осведомлён о свойствах контейнера и тех объектов, которые он собственноручно туда положил, но "продолжал грызть кактус".
А виноват, конечно, язык.


 
Черный Шаман   (2007-11-14 18:09) [138]


> Reindeer Moss Eater ©   (14.11.07 18:08) [136]
>
> Черный Шаман  
>
> так кроме шоумессаджа в блоке обработки можно и более полезный
> код писать.


Он там есть, но зачем он пользователю?


 
NX   (2007-11-14 18:12) [139]

Всякий раз, когда говорю о том что программирую на Делфи, то почему-то у всех сразу становятся кислые рожи, как будто это язык лунатиков, почему?


 
Reindeer Moss Eater ©   (2007-11-14 18:15) [140]

Он там есть, но зачем он пользователю?

Нормальный и полезный блок обработки выглядит чуть менее примитивно.
А именно:

on E : Что-то там do молча иисправляем что-то там
on E : Что-то там еще do молча иисправляем что-то там еще
...
в остальных случаях показываем сообщение


 
J_f_S   (2007-11-14 18:16) [141]


> Черный Шаман   (14.11.07 18:09) [138]
> > Reindeer Moss Eater ©   (14.11.07 18:08) [136]
> >
> > Черный Шаман  
> > так кроме шоумессаджа в блоке обработки можно и более
> полезный
> > код писать.
> Он там есть, но зачем он пользователю?

Действительно, зачем пользователю стабильные отказоустойчивые приложения?


 
Reindeer Moss Eater ©   (2007-11-14 18:18) [142]

Действительно, зачем пользователю стабильные отказоустойчивые приложения?

Отказоустойчивость - это подавленные диагностические сообщения???
Превед!


 
Игорь Шевченко ©   (2007-11-14 18:20) [143]

NX   (14.11.07 18:12) [139]

Смени круг общения.

Reindeer Moss Eater ©   (14.11.07 17:58) [129]


> возбужденные исключения тоже не нарушают.
> возвращаемся по стеку к месту вызова и все.
> это не гоуту, это ранний возврат


Дабы пояснить иллюстрацией:

Имеет код:

try
 try
   if SomeBadCondition then
     raise Exception1.Create (...)
   .....
   if SomeAnotherBadCondition then
     raise Exception2.Create (...)
 except
   on E: Exception1 do
   begin
     .....
   end;
   on E: Exception2 do
   begin
     .....
     raise Exception.Create (...+E.Message);
   end;
   on E: Exception do
   begin
     .....
   end;
 end;
.....
except
 on E: Exception do
 begin
    .......
   
 end;
end;

Писать лень, но этот кусок может быть обернут еще в несколько try...except, try..finally

Если кто-то скажет, что ход исполнения программы можно легко и просто проследить, значит мне пора на свалку истории.


 
J_f_S   (2007-11-14 18:22) [144]


> Отказоустойчивость - это подавленные диагностические сообщения?
> ??

Я не про подавленные мессаджи, а про код обработки ошибок, конечно.


 
Reindeer Moss Eater ©   (2007-11-14 18:22) [145]

Если кто-то скажет, что ход исполнения программы можно легко и просто проследить, значит мне пора на свалку истории.

Вообще да согласен, но это из серии "Корявый код можно нарисовать на любом языке"


 
Azize ©   (2007-11-14 18:24) [146]

По сабжу
Исходя из логики препода
java=C=C++=MSV C++=MSV=MSV Basic = Basic = Фуфло pascal и то лучше
)))


 
Игорь Шевченко ©   (2007-11-14 18:25) [147]

Reindeer Moss Eater ©   (14.11.07 18:22) [145]


> Вообще да согласен, но это из серии "Корявый код можно нарисовать
> на любом языке"


А идеи по выпрямлению есть ? :)


 
Reindeer Moss Eater ©   (2007-11-14 18:30) [148]

try
  if SomeBadCondition then
    raise Exception1.Create (...)


Вообще это клиника конечно. Обычно один программер возбуждает исключения для другого программера и т.д.

То есть автор компонента/библиотеки - пользователю библиотеки.
Но что бы самому себе?


 
Reindeer Moss Eater ©   (2007-11-14 18:31) [149]

Именно в таком виде


 
Azize ©   (2007-11-14 18:32) [150]


> java=C=C++=MSV C++=MSV=MSV Basic = Basic = Фуфло pascal
> и то лучше

вернее
java=C=C++=MSV C++=MSVS=MSV Basic = Basic = Фуфло pascal


 
@!!ex ©   (2007-11-14 18:47) [151]

> а зачем это знать?

А когда освобождать ресурсы?


> серьезно что ли? И в какой же момент?

В момент вызова дескуртора.


> Я то думал, что объект будет удален исключительно тогда,
> когда будет вызван деструктор объекта. Не раньше и не позже.
>
> Точно также ресурсы можно освободить по вызову метода.

По вызову какого метода????
Какой метод ява вызывает при удалении объекта????


 
Плохиш ©   (2007-11-14 18:47) [152]


> Reindeer Moss Eater ©   (14.11.07 18:05) [134]
> if condition then exit;
>
> if condition then abort;
>
> одно и то же.

да шо ви говорите?


 
Piter ©   (2007-11-14 18:51) [153]

@!!ex ©   (14.11.07 18:47) [151]
Какой метод ява вызывает при удалении объекта????


а какой метод Delphi вызывает при удалении объекта?


 
@!!ex ©   (2007-11-14 18:53) [154]

> [153] Piter ©   (14.11.07 18:51)

А его вызываю я, когда МНЕ это нужно.

На дельфи:
есть ресурсы, которые мне надо освободить при релизе объекта.
Я тупо освобождаю ресурсы в деструкторе.

на яве:
есть ресурсы, которые мне надо освободить при релизе объекта.
где я должен их освобождать? ОТдельный метод? Так вызов этого метода никак не связан с релизом объекта.


 
Virgo_Style ©   (2007-11-14 18:55) [155]

Насколько я себе уяснил, зло прежде всего в том, что освобождать объект на Delphi - это нерушимое правило, и делается это заранее условленными методами.
Для Java же предполагается, что все случится автоматически, а лично я, признаться, справку читаю только тогда, когда мне что-то становится неясно, и боюсь, что не я один... а ресурсы-то потекут, поскольку о том, что надо вызывать еще что-то, я попросту не буду знать.

Конечно, я в этом случае буду сам себе злобный буратино, но для чего лишать разработчика возможности снизить чужую буратинистость?


 
Черный Шаман   (2007-11-14 18:59) [156]


> Reindeer Moss Eater ©   (14.11.07 18:05) [134]
>
> if condition then exit;
>
> if condition then abort;
>
> if condition then raise;
>
> одно и то же.
>
> но в последнем случае еще и некий workaround выполняется
> в виде показа мессаджа.


Exception можно использовать только для выхода из нескольких вложенных вызовов методов, а если нужен выход из одного текущего вызова метода, то намного удобнее Exit и вернуть логический статус выполнения операции.


 
pasha_golub ©   (2007-11-14 19:00) [157]


> Reindeer Moss Eater ©   (14.11.07 18:30) [148]
>
> try
>   if SomeBadCondition then
>     raise Exception1.Create (...)
>
> Вообще это клиника конечно. Обычно один программер возбуждает
> исключения для другого программера и т.д.
>


Поддерживаю оратора. Но самому себе тоже можно. В другой, например, функции, которая будет вызвана.

2ИШ
То что отлаживать с excption"ами иногда муторно, я согласен. Но зато, получили Exception, тут же выкинуло нас в код, жмакаем Ctrl+Alt+S и имеем стек откуда шо пришло. А в ином случае, пришлось бы по F7 спускаться самим.


 
DiamondShark ©   (2007-11-14 19:01) [158]


> @!!ex ©   (14.11.07 18:47) [151]
> > а зачем это знать?
>
> А когда освобождать ресурсы?

Удаление объекта и освобождение ресурсов -- это разные операции.


> По вызову какого метода????
> Какой метод ява вызывает при удалении объекта????

При удалении объекта ява вызывает метод finalize(). Но это не важно. Она могла бы не вызывать вообще никакого метода. Это нисколько не мешает освобождать ресурсы.


 
@!!ex ©   (2007-11-14 19:01) [159]

Эксцепшены очень клевая штука на стадии разработки проекта.


 
@!!ex ©   (2007-11-14 19:03) [160]

Когда художнику отдаешь ехешку.
он ее вставляет в проект, а она не запускается... отчегО?
От того что файл не найден!
Не вопрос, сейчас отдам.
А не было бы эксцепшена?
ехешка не запускается...
почему? а я х.з...
пришлите лог пожалуйста?
муторно...
кто будет туда сюда логи таскать?



Страницы: 1 2 3 4 5 6 7 8 9 
10 11 вся ветка

Форум: "Прочее";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.83 MB
Время: 0.108 c
15-1195316595
guav
2007-11-17 19:23
2007.12.16
Быстрая сортировка :-)


5-1164191017
Master_
2006-11-22 13:23
2007.12.16
MiTeC System Information Component - где взять!


3-1187079408
alex_tonk
2007-08-14 12:16
2007.12.16
Создание DBF-ника


4-1180599186
bns
2007-05-31 12:13
2007.12.16
Long file path


15-1195396155
Веб-дизайн
2007-11-18 17:29
2007.12.16
книги





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский