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

Вниз

Функция, возвращающая строку ошибки   Найти похожие ветки 

 
Пробегал...   (2008-02-13 16:50) [0]

Как вы относитесь к таким функциям? То есть, функция, которая в случае успеха возвращает пустую строку, в случае неуспеха возвращает строку ощибки.
С одной стороны вроде логично, с другой почему-то ни в каких исходниках это не встречал. Чем может быть плохо?

P.S. Альтернатива понятна - использование исключений и в вызывающем коде для записи лога или вывода пользователю использовать E.Message. Но если не хочется исключений?


 
Kolan ©   (2008-02-13 16:52) [1]

> Как вы относитесь к таким функциям?

Плохо, потому, что в общем случае непонятно что пустая строка — это успех. Для успеха/неудачи уже придумали тип — Boolean называется.


 
Palladin ©   (2008-02-13 16:53) [2]

если их написал я - то нормально отнесусь
если кто то другой - обкакаю!

:)

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


 
Palladin ©   (2008-02-13 16:54) [3]

ошибки же обрабатывать нужно, а не только пользователю показывать...


 
DiamondShark ©   (2008-02-13 16:56) [4]


> Чем может быть плохо?

1. В особо тяжёлых случаях (например, в условиях острой нехватки памяти) может не получиться вернуть строку. Интегер всегда получится вернуть.

2. Строку задолбишься сравнивать.

3. Часто строка нафиг не нужна, и даже код ошибки не нужен, достаточно признака удачно/облом.


 
DiamondShark ©   (2008-02-13 16:58) [5]

а вообще, возвращать ничего не надо.
унутре функций должен стоять Halt при ошибке.


 
Rouse_ ©   (2008-02-13 17:03) [6]


> С одной стороны вроде логично, с другой почему-то ни в каких
> исходниках это не встречал.

Эмм... А SysErrorMessage(GetLastError) тоже не видел? :)


 
Пробегал...   (2008-02-13 17:12) [7]

Поясню.

Там где текст ошибки не нужен - понятное дело нет смысла возвращать текст ошибки ;)

Что касается лучше устанавливать код ошибки... Видимо, да. Но если ошибка нестандартна? Искать похожую в WinApi и устанавливать SetLastError?
Или наверное есть специальный диапазон пользовательский, в котором можно устанавливать свои ошибки и который не использует система?
Тогда можно наверное просто переделать SysErrorMessage на SysErrorMessageMy например ;) Которая будет вызывать SysErrorMessage для системных ошибок и возвращать текст для "своих" ошибок?

DiamondShark ©   (13.02.08 16:56) [4]
2. Строку задолбишься сравнивать.


а зачем ее с чем-то сравнивать?


 
Palladin ©   (2008-02-13 17:17) [8]

а зачем тебе тогда string возвращать? сразу на месте ShowMessage и Abort нафик...


 
Пробегал...   (2008-02-13 17:21) [9]

во-первых, программа может работать как неинтерактивный сервис, какой нафиг ShowMessage.

Во-вторых, функция может исполняться не в основном потоке.

В-третьих, это самодостаточная функция, например из какого-то готового набора функций или класса. Вряд ли бы тебе понравилось, если какой-нибудь используемый класс пытался выдавать ошибки через ShowMessage


 
Palladin ©   (2008-02-13 17:24) [10]


> Вряд ли бы тебе понравилось, если какой-нибудь используемый
> класс пытался выдавать ошибки через ShowMessage

ShowMessage заменяется на подходящее по контексту LogWriteLn, SendToMail, PutToWebSite... иначе на кой тебе текст ошибки... а раз он ни на кой не нужен то возвращаемся к твоему


> Там где текст ошибки не нужен - понятное дело нет смысла
> возвращать текст ошибки


 
DiamondShark ©   (2008-02-13 17:28) [11]


> Пробегал...   (13.02.08 17:12) [7]
> DiamondShark ©   (13.02.08 16:56) [4]
> 2. Строку задолбишься сравнивать.
>
> а зачем ее с чем-то сравнивать?

А зачем тогда вообще что-то возвращать?


 
Kolan ©   (2008-02-13 17:32) [12]

> [4] DiamondShark ©   (13.02.08 16:56)

Кроме того со временем удача может изменится с "" на "Ok" например, и вот тут то и грабли&#133


 
DiamondShark ©   (2008-02-13 17:39) [13]


> Kolan ©   (13.02.08 17:32) [12]
> > [4] DiamondShark ©   (13.02.08 16:56)
>
> Кроме того со временем удача может изменится с "" на "Ok"
> например, и вот тут то и грабли…

Это как раз фигня, она точно так же может измениться с "не 0" на 17.

А вот то, что возврат строки требует наличия менеджера памяти, свободного места в куче и цикла перегонки байтов -- это уже не фигня.


 
ketmar ©   (2008-02-13 17:55) [14]

>[0] Пробегал... (2008-02-13 16:50:00)
>Как вы относитесь к таким функциям?

идиотизм.

>если не хочется исключений?
ССЗБ.

---
Understanding is not required. Only obedience.


 
Пробегал...   (2008-02-13 17:59) [15]

Palladin ©   (13.02.08 17:24) [10]
ShowMessage заменяется на подходящее по контексту LogWriteLn, SendToMail, PutToWebSite...


по какому контексту? Вот допустим есть некий КЛАСС, инкапсулирующий работу с чем-то. Он возвращает код ошибки в случае чего. Откуда он знает, КУДА его писать? Это уже дело разработчика программы, или в лог, или на экран выводить. Черный ящик не может знать путей вывода информации.

DiamondShark ©   (13.02.08 17:28) [11]
А зачем тогда вообще что-то возвращать?


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


 
Palladin ©   (2008-02-13 18:11) [16]


> [15] Пробегал...   (13.02.08 17:59)

тада смотри

кетмар[14] пункт 2
бо исключениями это решается легко и беззаботно, без всяких анализов на пустую строку...


 
Пробегал...   (2008-02-13 18:18) [17]

Palladin ©   (13.02.08 18:11) [16]
бо исключениями это решается легко и беззаботно


ну про исключения я уже написал в своем самом первом посте! Но без них никак?

Тогда по-другому - а как эта проблема решается, например, на C++?
А еще интересно про C#


 
Virgo_Style ©   (2008-02-13 18:21) [18]

Полагаю, пара аналогов SysErrorMessage и GetLastError - это самое оно, если без исключений. Хочешь код - есть код, хочешь текст - бери текст... Завязываться на то, что текст со временем не изменится - это чревато. А в случае локализации вообще изврат какой-то получится, imho.


 
clickmaker ©   (2008-02-13 18:23) [19]


> Тогда по-другому - а как эта проблема решается, например,
> на C++?
> А еще интересно про C#

а что с ними не так?


 
ketmar ©   (2008-02-13 18:28) [20]

>[19] clickmaker © (2008-02-13 18:23:00)
буквы «c» в слове Delphi нет, вот и неясно.

---
Understanding is not required. Only obedience.


 
Пробегал...   (2008-02-13 18:34) [21]

clickmaker ©   (13.02.08 18:23) [19]
а что с ними не так?


как же мне надоело такие перевопросы... А что, я где-то сказал чт ос ними что-то не так. Я если вы не заметили спросил:

"а как эта проблема решается, например, на C++?"


 
Palladin ©   (2008-02-13 18:36) [22]

как как... функция чего то возвращает и явно не char*, а что нибудь типа int, если int не true, то существует функция geterrorstring для каждого из случаев...


 
ketmar ©   (2008-02-13 18:44) [23]

>[22] Palladin © (2008-02-13 18:36:00)
это… там тоже исключения есть. %-)

---
Understanding is not required. Only obedience.


 
Palladin ©   (2008-02-13 18:46) [24]

та я знаю :) просто он спросил как там делают без их использования... :)


 
Пробегал...   (2008-02-13 18:48) [25]

Palladin ©   (13.02.08 18:36) [22]

то есть, возвращаются некоторые значения и оговорено, какую функцию вызывать для преобразования кода ошибки в текст?


 
Пробегал...   (2008-02-13 18:50) [26]

Palladin ©   (13.02.08 18:46) [24]
та я знаю :) просто он спросил как там делают без их использования... :)


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


 
ketmar ©   (2008-02-13 18:52) [27]

вот интересно, а какая связь между C и «C++/C#» (окромя curly bracets?)

---
Understanding is not required. Only obedience.


 
Palladin ©   (2008-02-13 18:55) [28]


> вот интересно, а какая связь между C и «C++/C#»

+ сто тыщ миллионов...


 
DiamondShark ©   (2008-02-13 19:03) [29]


> Я мало видел исходников на C, но ощущение, что стиль там
> программирования другой, не любят сишники исключений.

Наверное, потому что в С их нет.


 
Пробегал...   (2008-02-13 20:30) [30]

Атмосфера на форуме просто ужасная. Самый высший принцип - как-нибудь поддеть задащего вопрос, растерзать, прицепиться к словам. Что угодно, главное доказать что вопрошающий - лох, а значит хрен с ним... ;(


 
Пробегал...   (2008-02-13 20:32) [31]

ладно, спрошу так:

На реализации языка C++ фирмой Microsoft в своем пакете VS.NET 2005 как обычно программисты пишут в таких ситуациях? Именно исключения используют или принята другая технология какая-нибудь?


 
Palladin ©   (2008-02-13 20:43) [32]


>  Пробегал...

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


 
Пробегал...   (2008-02-13 21:04) [33]

к вопросу озвученному в [31] хотелось бы добавить еще один вопрос, который я уже задавал в этой ветке:

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


 
TUser ©   (2008-02-13 22:04) [34]

Это зависит от задачи.


 
Мазут Береговой   (2008-02-13 23:54) [35]


> Пробегал...   (13.02.08 20:32) [31]
> ладно, спрошу так:
>
> На реализации языка C++ фирмой Microsoft в своем пакете
> VS.NET 2005 как обычно программисты пишут в таких ситуациях?
>  Именно исключения используют или принята другая технология
> какая-нибудь?

не знаю как С++, но С# используются обычный try{} catch(){} finally{} блок.
в любом месте можно самостоятельно выкинуть ошибку throw new Exception()... и т.д.


 
Celades ©   (2008-02-14 00:19) [36]


> На реализации языка C++ фирмой Microsoft в своем пакете
> VS.NET 2005 как обычно программисты пишут в таких ситуациях?
>  Именно исключения используют или принята другая технология
> какая-нибудь?

Конечно все нормальные используют исключения. Грех таким инструментом не воспользоваться. Но в С++ есть одна классная фича, которая позволяет работать с исключениями очень удобно - это автоматические деструкторы.


 
Sandman25   (2008-02-14 08:47) [37]

Celades ©   (14.02.08 00:19) [36]

В других языках еще удобнее - сборщики мусора :)


 
oldman ©   (2008-02-14 08:58) [38]


> То есть, функция, которая в случае успеха возвращает пустую
> строку, в случае неуспеха возвращает строку ощибки.


если бы все так просто было в этой жизни... :(((

обычно успех\неуспех вычисляются по полученным данным.
или их отсутствию.
прога же не напишет "ошибка в днк"...


 
Riply ©   (2008-02-14 11:01) [39]

> [33] Пробегал...   (13.02.08 21:04)
> к вопросу озвученному в [31] хотелось бы добавить еще один вопрос,
> который я уже задавал в этой ветке:

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

http://delphimaster.net/view/2-1197810242/


 
clickmaker ©   (2008-02-14 11:14) [40]


> На реализации языка C++ фирмой Microsoft в своем пакете
> VS.NET 2005 как обычно программисты пишут в таких ситуациях?

на C++/C#/VB.NET работа с исключениями мало отличается от дельфийской.
Если используешь MFC, то там есть базовый класс CException, как и в Дельфи.
В любом случае, целесообразность использования исключений определяется
кодом.
Например, код
try {
 CheckProc1();
 ...
 CheckProcN()
}
catch (...) {
 MessageBox(...);
}
выглядит читабельней, чем, скажем такой, уходящий за горизонт лестницей
if (CheckProc1()) {
 ...
                          if (CheckProcN() {
                              // все хорошо
                         }
                         else {
                            // не совсем хорошо
                         }
}
else
 // совсем не хорошо
Если пишешь некую DLL, то хорошим тоном считается, когда функция возвращает
- код ошибки и предоставляет функцию для получения текста по коду
- 1 или 0 и предоставляет нечто вроде GetLastError или GetLastErrorText
- устанавливает код ошибки в своем диапазоне путем SetLastError и предоставляет интерфейс для функции FormatMessage с флагом FORMAT_MESSAGE_FROM_HMODULE

Выбор способа зависит от степени испорченности программиста.



Страницы: 1 2 вся ветка

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

Наверх





Память: 0.61 MB
Время: 0.06 c
2-1204190493
Still Swamp
2008-02-28 12:21
2008.03.30
Как использовать TwilightColorMap


4-1185978968
tio
2007-08-01 18:36
2008.03.30
Полигоны


15-1203084426
Александр Иванов
2008-02-15 17:07
2008.03.30
Яндекс-Директ


15-1202887384
de.
2008-02-13 10:23
2008.03.30
Существуют ли алгоритмы ?


15-1202916995
SonOfMorning
2008-02-13 18:36
2008.03.30
одрес с учетом объединения регионов и переименования.





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