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

Вниз

О провилах хорошего тона в программировании.   Найти похожие ветки 

 
KSergey ©   (2004-04-08 11:16) [160]

> [159] KSergey ©   (08.04.04 11:15)
> Вот некий кусочек...

Типичный имелось в виду..
Правда, на форуме он смотрится менее читабельным, чем в оригинале... Мдя...


 
KSergey ©   (2004-04-08 11:16) [160]

> [159] KSergey ©   (08.04.04 11:15)
> Вот некий кусочек...

Типичный имелось в виду..
Правда, на форуме он смотрится менее читабельным, чем в оригинале... Мдя...


 
Alex Konshin ©   (2004-04-08 11:37) [161]

Нормально. Лучше, чем у меня.


 
Alex Konshin ©   (2004-04-08 11:37) [161]

Нормально. Лучше, чем у меня.


 
Alex Konshin ©   (2004-04-08 11:39) [162]

Мне обычно лень комментарии писать. Надо бы на английском, но у меня правильнописание хромает, оно хорошее, но хромает (c) Винни Пух.


 
Alex Konshin ©   (2004-04-08 11:39) [162]

Мне обычно лень комментарии писать. Надо бы на английском, но у меня правильнописание хромает, оно хорошее, но хромает (c) Винни Пух.


 
DiamondShark ©   (2004-04-08 11:59) [163]


> Сергей Суровцев ©   (08.04.04 00:20) [148]

Скажите, а во всех этих uk, 81, и прочих 312 есть какой-то глобальный общечеловеческий смысл?


 
DiamondShark ©   (2004-04-08 11:59) [163]


> Сергей Суровцев ©   (08.04.04 00:20) [148]

Скажите, а во всех этих uk, 81, и прочих 312 есть какой-то глобальный общечеловеческий смысл?


 
Ihor Osov'yak ©   (2004-04-08 12:21) [164]

2 [154] Soft ©   (08.04.04 06:57)

Хм. Если честно, то мне Вас жаль. Но ничем помочь не могу.

Зы. Позволю себе пару реплик, в ответ на некоторые версии о моих личностных качествах.

>Сразу видно мнение непрофессионала,

Вы бы объяснили, что Вы под словом "непрофессионал" понимаете. А заодно и под словом "профессионал"

> который знает только один язык.

А Вы мне экзамен устраивали? И есть ли у Вас квалификация, позволяющая экзамены устраивать?

> Вы просто некоторых компиляторов, с того C++ не видели.

Некоторых не видел. Некоторые - видел.

>Иногда на обычные сравнения ругаются...

Смею предположить, что имеют на то веские основания.

2[153] Aristarh ©   (08.04.04 02:03)

> Неужели у вас ни одного хинта? :)
Представьте себе - нет. Во всяком случае, в коде, написанном за последние 2-3 года.  

Кстати - см. [157]:
>либо в коде ошибка, либо код написан не очень грамотно.

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


 
Ihor Osov'yak ©   (2004-04-08 12:21) [164]

2 [154] Soft ©   (08.04.04 06:57)

Хм. Если честно, то мне Вас жаль. Но ничем помочь не могу.

Зы. Позволю себе пару реплик, в ответ на некоторые версии о моих личностных качествах.

>Сразу видно мнение непрофессионала,

Вы бы объяснили, что Вы под словом "непрофессионал" понимаете. А заодно и под словом "профессионал"

> который знает только один язык.

А Вы мне экзамен устраивали? И есть ли у Вас квалификация, позволяющая экзамены устраивать?

> Вы просто некоторых компиляторов, с того C++ не видели.

Некоторых не видел. Некоторые - видел.

>Иногда на обычные сравнения ругаются...

Смею предположить, что имеют на то веские основания.

2[153] Aristarh ©   (08.04.04 02:03)

> Неужели у вас ни одного хинта? :)
Представьте себе - нет. Во всяком случае, в коде, написанном за последние 2-3 года.  

Кстати - см. [157]:
>либо в коде ошибка, либо код написан не очень грамотно.

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


 
Юрий Зотов ©   (2004-04-08 12:48) [165]

> [157, 164]

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

> [153] Aristarh ©   (08.04.04 02:03)
> Неужели у вас ни одного хинта? :)

Ни одного, можете поверить. Ни в одной строчке моего кода, написанной за все годы, начиная еще с Delphi 1, нет ни единого хинта и, тем более, ни единого варнинга. Так писать совсем несложно и практически не отнимает лишнего времени - если, конечно, правильно писать СРАЗУ, а не оставлять разгребание грязи на неопределенное будущее.

Благодаря этому любой хинт или варнинг, появляющийся в только что написанном коде просто не может остаться незамеченным в море других. Он сразу же бросается в гдаза и тут же устраняется ВМЕСТЕ С ПОТЕНЦИАЛЬНОЙ ОШИБКОЙ В ПРОГРАММЕ (что, кстати, экономит гораздо больше времени на отладке).


 
Юрий Зотов ©   (2004-04-08 12:48) [165]

> [157, 164]

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

> [153] Aristarh ©   (08.04.04 02:03)
> Неужели у вас ни одного хинта? :)

Ни одного, можете поверить. Ни в одной строчке моего кода, написанной за все годы, начиная еще с Delphi 1, нет ни единого хинта и, тем более, ни единого варнинга. Так писать совсем несложно и практически не отнимает лишнего времени - если, конечно, правильно писать СРАЗУ, а не оставлять разгребание грязи на неопределенное будущее.

Благодаря этому любой хинт или варнинг, появляющийся в только что написанном коде просто не может остаться незамеченным в море других. Он сразу же бросается в гдаза и тут же устраняется ВМЕСТЕ С ПОТЕНЦИАЛЬНОЙ ОШИБКОЙ В ПРОГРАММЕ (что, кстати, экономит гораздо больше времени на отладке).


 
Думкин ©   (2004-04-08 12:52) [166]

Хинтов и варнингов в версиях меньше 7-й нет, и давлю. Но в 7-й появились 3 предупреждения. В списке предупрждений в конце. Как быть с ними? При их отключении - варнингов нет.
Не работать в 7-й? Отключать эти 3? Или писать так чтобы их не было?


 
Думкин ©   (2004-04-08 12:52) [166]

Хинтов и варнингов в версиях меньше 7-й нет, и давлю. Но в 7-й появились 3 предупреждения. В списке предупрждений в конце. Как быть с ними? При их отключении - варнингов нет.
Не работать в 7-й? Отключать эти 3? Или писать так чтобы их не было?


 
Игорь Шевченко ©   (2004-04-08 12:54) [167]


> Или писать так чтобы их не было?


Писать так, чтобы их не было


 
Игорь Шевченко ©   (2004-04-08 12:54) [167]


> Или писать так чтобы их не было?


Писать так, чтобы их не было


 
Думкин ©   (2004-04-08 12:54) [168]

Речь идет о:

Unsafe type
Unsafe code
Unsafe typecast


 
Думкин ©   (2004-04-08 12:54) [168]

Речь идет о:

Unsafe type
Unsafe code
Unsafe typecast


 
Думкин ©   (2004-04-08 12:56) [169]

Unsafe type "<element><element><element>"

List of compiler error messages

You have used a data type or operation for which static code analysis cannot prove that it does not overwrite memory. In a secured execution environment such as .NET, such code is assumed to be unsafe and a potential security risk.


Но ведь .NET только в следующей версии.


 
Думкин ©   (2004-04-08 12:56) [169]

Unsafe type "<element><element><element>"

List of compiler error messages

You have used a data type or operation for which static code analysis cannot prove that it does not overwrite memory. In a secured execution environment such as .NET, such code is assumed to be unsafe and a potential security risk.


Но ведь .NET только в следующей версии.


 
Ihor Osov'yak ©   (2004-04-08 13:01) [170]

2 Думкин

А написать что-то типа

{$IFDEF VER150}
  {$WARN UNSAFE_TYPE OFF}
  {$WARN UNSAFE_CAST OFF}
  {$WARN UNSAFE_CODE OFF}
  {$WARN SYMBOL_PLATFORM  OFF}
  {$WARN UNIT_PLATFORM OFF}
{$ENDIF}
религия не позволяет?


 
Ihor Osov'yak ©   (2004-04-08 13:01) [170]

2 Думкин

А написать что-то типа

{$IFDEF VER150}
  {$WARN UNSAFE_TYPE OFF}
  {$WARN UNSAFE_CAST OFF}
  {$WARN UNSAFE_CODE OFF}
  {$WARN SYMBOL_PLATFORM  OFF}
  {$WARN UNIT_PLATFORM OFF}
{$ENDIF}
религия не позволяет?


 
Ihor Osov'yak ©   (2004-04-08 13:03) [171]

естественно, только там, где это оправдано.. Ну, вокруг всяких танцев с апи, етс..


 
Ihor Osov'yak ©   (2004-04-08 13:03) [171]

естественно, только там, где это оправдано.. Ну, вокруг всяких танцев с апи, етс..


 
Думкин ©   (2004-04-08 13:07) [172]

> Ihor Osov"yak ©   (08.04.04 13:01) [170]

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


 
Думкин ©   (2004-04-08 13:07) [172]

> Ihor Osov"yak ©   (08.04.04 13:01) [170]

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


 
Ihor Osov'yak ©   (2004-04-08 13:15) [173]

2 Думкин
Ну, если лично мое мнение, то борланды в д7 немного с UNSAFE_CODE перестарались, вернее преждевременно.. Если уже считали нужным – то нужно было по дефолту выключить.

Вообще-то выше разговор шел о варнингах компиляторов вообще, а не о частностях с д7..
А в частности с д7 - все таки, наверное, придется юзать {$IFDEF VER150}..
Не понятна мне здесь глубина мысли Борланда. Или они перестарались, или я не догоняю. Не исключено, что вариант второй. Хотя для меня это вопрос пока чисто теоретический - на д7 не работаю, просто так, немного проходил мимо..

А за религию сори - немного перегнул палку (я).


 
Ihor Osov'yak ©   (2004-04-08 13:15) [173]

2 Думкин
Ну, если лично мое мнение, то борланды в д7 немного с UNSAFE_CODE перестарались, вернее преждевременно.. Если уже считали нужным – то нужно было по дефолту выключить.

Вообще-то выше разговор шел о варнингах компиляторов вообще, а не о частностях с д7..
А в частности с д7 - все таки, наверное, придется юзать {$IFDEF VER150}..
Не понятна мне здесь глубина мысли Борланда. Или они перестарались, или я не догоняю. Не исключено, что вариант второй. Хотя для меня это вопрос пока чисто теоретический - на д7 не работаю, просто так, немного проходил мимо..

А за религию сори - немного перегнул палку (я).


 
Тупиковая ветвь эволюции   (2004-04-08 13:22) [174]

Господа! Будьте добры, посмотрите на следующий исходник и оцените, пожалуйста. Как вы думаете, так жить можно или лучше сразу руки себе отпилить?:

Перем ТипПеречисления, СписПеречисление;
Перем ТекстУдаления, ТекстСоздания, ТекстОбновления;
Перем ИмяСервера_, ИмяБД_;

Процедура ОткрытьКаталог()
НачальныйКаталог = ФС.ТекКаталог();
Если ФС.ВыбратьКаталог( НачальныйКаталог, "Выбор каталога для выгрузки" ) = 1 Тогда
 Каталог = НачальныйКаталог;
 ФС.УстТекКаталог( Каталог );
КонецЕсли;
КонецПроцедуры

Функция ПутьФайла( _Каталог, _ИмяФайла )
Возврат СокрЛП( _Каталог ) + "\" + СокрЛП( _ИмяФайла );
КонецФункции

Процедура Доступности()
Форма.ИмяСервера.Доступность( ИмяСервераФлажок );
ИмяБДФлажок = ?( ИмяСервераФлажок = 1, ИмяСервераФлажок, ИмяБДФлажок );
Форма.ИмяБДФлажок.Доступность( ?( ИмяСервераФлажок = 1, 0, 1 ) );
Форма.ИмяБД.Доступность( ИмяБДФлажок );
КонецПроцедуры

Процедура СформироватьФайлы( _Список, _ТипПеречисления )
Список_ = СоздатьОбъект( "СписокЗначений" );
Текст_ = СоздатьОбъект( "Текст" );
Для Счетчик = 1 По _Список.РазмерСписка() Цикл
 Значение_ = _Список.ПолучитьЗначение( Счетчик );
 Текст_.ДобавитьСтроку( Значение_ );
 Строка_ = Текст_.ПолучитьСтроку( Счетчик );
 Строка_ = _IdToStr( Число( СокрЛП( Строка_ ) ) ) + "   " + ";" + Строка_ + ";" + _Список.ПолучитьЗначение( Счетчик );
 Текст_.ЗаменитьСтроку( Счетчик , Строка_ );
КонецЦикла;
Строка_ = ЗначениеВСтрокуВнутр( _Список.ПолучитьЗначение( _Список.РазмерСписка() ) );
Список_.ИзСтрокиСРазделителями( Строка_ );
ИмяТаблицы_ = ?( ПрефиксФлажок = 1, "te", "" ) + СокрЛП( _IdToStr( Список_.ПолучитьЗначение( 4 ) ) ) + ?( ИТ_Флажок = 1, "_", "" ) + ?( ИТСинонимФлажок = 1, _ТипПеречисления, "" );
Текст_.ДобавитьСтроку( "Empty;Empty;Пустое Значение" );
ИмяФайла_ =  СокрЛП( _IdToStr( Список_.ПолучитьЗначение( 4 ) ) ) + ?( ИФ_Флажок = 1, "_", "" ) + ?( ИФСинонимФлажок = 1, _ТипПеречисления, "" ) + ".txt";
Текст_.Записать( ПутьФайла( Каталог, ИмяФайла_ ) );
Если СкриптУдаления = 1 Тогда
 ТекстУдаления.ДобавитьСтроку( "DROP TABLE " + ИмяСервера_ + ИмяБД_ + "[dbo].[" + ИмяТаблицы_ + "]" );
 ТекстУдаления.Записать( ПутьФайла( Каталог, "DropAll.sql" ) );
КонецЕсли;
Если СкриптСоздания = 1 Тогда
 ТекстСоздания.ДобавитьСтроку( "CREATE TABLE " + ИмяСервера_ + ИмяБД_ + "[dbo].[" + ИмяТаблицы_ + "] (ID char (9), CODE char (13), [NAME] char (100))" );
 ТекстСоздания.Записать( ПутьФайла( Каталог, "CreateAll.sql" ) );
КонецЕсли;
Если СкриптОбновления = 1 Тогда
 ТекстОбновления.ДобавитьСтроку( "BULK INSERT " + ИмяСервера_ + ИмяБД_ + "[dbo].[" + ИмяТаблицы_ + "] FROM "" + ПутьФайла( Каталог, ИмяФайла_ ) + "" WITH (CODEPAGE = "1251",DATAFILETYPE = "char",FIELDTERMINATOR = ";")" );
 ТекстОбновления.Записать( ПутьФайла( Каталог, "BulkInsert.sql" ) );
КонецЕсли;
КонецПроцедуры

Процедура СформироватьСписокПеречислений( _ТипПеречисления )
СписПеречисление.УдалитьВсе();
ВидПеречисления = Перечисление.ПолучитьАтрибут( _ТипПеречисления );
Для Счетчик = 1 По ВидПеречисления.КоличествоЗначений() Цикл
 СписПеречисление.ДобавитьЗначение( ВидПеречисления.ЗначениеПоНомеру( Счетчик ) );
КонецЦикла;
СформироватьФайлы( СписПеречисление, _ТипПеречисления );
КонецПроцедуры

Процедура СформироватьСписокТиповПеречислений()
ТекстУдаления.Очистить(); ТекстСоздания.Очистить(); ТекстОбновления.Очистить();
ИмяСервера_ = ?( ИмяСервераФлажок = 1, СокрЛП( ИмяСервера ) + ?( ПустаяСтрока( ИмяСервера ) = 0, ".", "" ), "" );
ИмяБД_ = ?( ИмяБДФлажок = 1, СокрЛП( ИмяБД ) + ?( ПустаяСтрока( ИмяБД ) = 0, ".", "RealWH." ), "" );
ИмяСервера_ = СокрЛП( ИмяСервера_); ИмяБД_ = СокрЛП( ИмяБД_);
Для Счетчик = 1 По Метаданные.Перечисление() Цикл
 Строка_ = Метаданные.Перечисление( Счетчик ).Идентификатор;
 ТипПеречисления.ДобавитьЗначение( Строка_ );
 СформироватьСписокПеречислений( Строка_ );
КонецЦикла;
КонецПроцедуры

Процедура ПриОткрытии()
Доступности();
КонецПроцедуры

ТипПеречисления = СоздатьОбъект( "СписокЗначений" );
СписПеречисление = СоздатьОбъект( "СписокЗначений" );
ТекстУдаления = СоздатьОбъект( "Текст" );
ТекстСоздания = СоздатьОбъект( "Текст" );
ТекстОбновления = СоздатьОбъект( "Текст" );


 
Тупиковая ветвь эволюции   (2004-04-08 13:22) [174]

Господа! Будьте добры, посмотрите на следующий исходник и оцените, пожалуйста. Как вы думаете, так жить можно или лучше сразу руки себе отпилить?:

Перем ТипПеречисления, СписПеречисление;
Перем ТекстУдаления, ТекстСоздания, ТекстОбновления;
Перем ИмяСервера_, ИмяБД_;

Процедура ОткрытьКаталог()
НачальныйКаталог = ФС.ТекКаталог();
Если ФС.ВыбратьКаталог( НачальныйКаталог, "Выбор каталога для выгрузки" ) = 1 Тогда
 Каталог = НачальныйКаталог;
 ФС.УстТекКаталог( Каталог );
КонецЕсли;
КонецПроцедуры

Функция ПутьФайла( _Каталог, _ИмяФайла )
Возврат СокрЛП( _Каталог ) + "\" + СокрЛП( _ИмяФайла );
КонецФункции

Процедура Доступности()
Форма.ИмяСервера.Доступность( ИмяСервераФлажок );
ИмяБДФлажок = ?( ИмяСервераФлажок = 1, ИмяСервераФлажок, ИмяБДФлажок );
Форма.ИмяБДФлажок.Доступность( ?( ИмяСервераФлажок = 1, 0, 1 ) );
Форма.ИмяБД.Доступность( ИмяБДФлажок );
КонецПроцедуры

Процедура СформироватьФайлы( _Список, _ТипПеречисления )
Список_ = СоздатьОбъект( "СписокЗначений" );
Текст_ = СоздатьОбъект( "Текст" );
Для Счетчик = 1 По _Список.РазмерСписка() Цикл
 Значение_ = _Список.ПолучитьЗначение( Счетчик );
 Текст_.ДобавитьСтроку( Значение_ );
 Строка_ = Текст_.ПолучитьСтроку( Счетчик );
 Строка_ = _IdToStr( Число( СокрЛП( Строка_ ) ) ) + "   " + ";" + Строка_ + ";" + _Список.ПолучитьЗначение( Счетчик );
 Текст_.ЗаменитьСтроку( Счетчик , Строка_ );
КонецЦикла;
Строка_ = ЗначениеВСтрокуВнутр( _Список.ПолучитьЗначение( _Список.РазмерСписка() ) );
Список_.ИзСтрокиСРазделителями( Строка_ );
ИмяТаблицы_ = ?( ПрефиксФлажок = 1, "te", "" ) + СокрЛП( _IdToStr( Список_.ПолучитьЗначение( 4 ) ) ) + ?( ИТ_Флажок = 1, "_", "" ) + ?( ИТСинонимФлажок = 1, _ТипПеречисления, "" );
Текст_.ДобавитьСтроку( "Empty;Empty;Пустое Значение" );
ИмяФайла_ =  СокрЛП( _IdToStr( Список_.ПолучитьЗначение( 4 ) ) ) + ?( ИФ_Флажок = 1, "_", "" ) + ?( ИФСинонимФлажок = 1, _ТипПеречисления, "" ) + ".txt";
Текст_.Записать( ПутьФайла( Каталог, ИмяФайла_ ) );
Если СкриптУдаления = 1 Тогда
 ТекстУдаления.ДобавитьСтроку( "DROP TABLE " + ИмяСервера_ + ИмяБД_ + "[dbo].[" + ИмяТаблицы_ + "]" );
 ТекстУдаления.Записать( ПутьФайла( Каталог, "DropAll.sql" ) );
КонецЕсли;
Если СкриптСоздания = 1 Тогда
 ТекстСоздания.ДобавитьСтроку( "CREATE TABLE " + ИмяСервера_ + ИмяБД_ + "[dbo].[" + ИмяТаблицы_ + "] (ID char (9), CODE char (13), [NAME] char (100))" );
 ТекстСоздания.Записать( ПутьФайла( Каталог, "CreateAll.sql" ) );
КонецЕсли;
Если СкриптОбновления = 1 Тогда
 ТекстОбновления.ДобавитьСтроку( "BULK INSERT " + ИмяСервера_ + ИмяБД_ + "[dbo].[" + ИмяТаблицы_ + "] FROM "" + ПутьФайла( Каталог, ИмяФайла_ ) + "" WITH (CODEPAGE = "1251",DATAFILETYPE = "char",FIELDTERMINATOR = ";")" );
 ТекстОбновления.Записать( ПутьФайла( Каталог, "BulkInsert.sql" ) );
КонецЕсли;
КонецПроцедуры

Процедура СформироватьСписокПеречислений( _ТипПеречисления )
СписПеречисление.УдалитьВсе();
ВидПеречисления = Перечисление.ПолучитьАтрибут( _ТипПеречисления );
Для Счетчик = 1 По ВидПеречисления.КоличествоЗначений() Цикл
 СписПеречисление.ДобавитьЗначение( ВидПеречисления.ЗначениеПоНомеру( Счетчик ) );
КонецЦикла;
СформироватьФайлы( СписПеречисление, _ТипПеречисления );
КонецПроцедуры

Процедура СформироватьСписокТиповПеречислений()
ТекстУдаления.Очистить(); ТекстСоздания.Очистить(); ТекстОбновления.Очистить();
ИмяСервера_ = ?( ИмяСервераФлажок = 1, СокрЛП( ИмяСервера ) + ?( ПустаяСтрока( ИмяСервера ) = 0, ".", "" ), "" );
ИмяБД_ = ?( ИмяБДФлажок = 1, СокрЛП( ИмяБД ) + ?( ПустаяСтрока( ИмяБД ) = 0, ".", "RealWH." ), "" );
ИмяСервера_ = СокрЛП( ИмяСервера_); ИмяБД_ = СокрЛП( ИмяБД_);
Для Счетчик = 1 По Метаданные.Перечисление() Цикл
 Строка_ = Метаданные.Перечисление( Счетчик ).Идентификатор;
 ТипПеречисления.ДобавитьЗначение( Строка_ );
 СформироватьСписокПеречислений( Строка_ );
КонецЦикла;
КонецПроцедуры

Процедура ПриОткрытии()
Доступности();
КонецПроцедуры

ТипПеречисления = СоздатьОбъект( "СписокЗначений" );
СписПеречисление = СоздатьОбъект( "СписокЗначений" );
ТекстУдаления = СоздатьОбъект( "Текст" );
ТекстСоздания = СоздатьОбъект( "Текст" );
ТекстОбновления = СоздатьОбъект( "Текст" );


 
Тупиковая ветвь эволюции   (2004-04-08 13:23) [175]

К сожалению, форматирование все же съехало, прошу прощения.


 
Тупиковая ветвь эволюции   (2004-04-08 13:23) [175]

К сожалению, форматирование все же съехало, прошу прощения.


 
Думкин ©   (2004-04-08 13:28) [176]

> Ihor Osov"yak ©   (08.04.04 13:15) [173]

Да, и я так думаю. Поэтому и спросил. В первый же раз как я скомпилировал простенькую программу на Д7 -  у меня вывалило кучу предупреждений, что было несколько неприятно.
var a : PChar; //Извольте получите предупреждение.
и т.п.
Пришлось эти отключать, хотя отключение предупреждений - до этого не практиковал.


 
Думкин ©   (2004-04-08 13:28) [176]

> Ihor Osov"yak ©   (08.04.04 13:15) [173]

Да, и я так думаю. Поэтому и спросил. В первый же раз как я скомпилировал простенькую программу на Д7 -  у меня вывалило кучу предупреждений, что было несколько неприятно.
var a : PChar; //Извольте получите предупреждение.
и т.п.
Пришлось эти отключать, хотя отключение предупреждений - до этого не практиковал.


 
Ihor Osov'yak ©   (2004-04-08 13:39) [177]

2 [176] Думкин ©   (08.04.04 13:28)

Ну, я немного раньше поработал с с# малость, и беллетристики их немного почитал, перед тем как увидать д7, поэтому шок был не очень сильным. Поставил директивы, и остался при своем мнении.


 
Ihor Osov'yak ©   (2004-04-08 13:39) [177]

2 [176] Думкин ©   (08.04.04 13:28)

Ну, я немного раньше поработал с с# малость, и беллетристики их немного почитал, перед тем как увидать д7, поэтому шок был не очень сильным. Поставил директивы, и остался при своем мнении.


 
DiamondShark ©   (2004-04-08 14:14) [178]


> Процедура Доступности()
> Форма.ИмяСервера.Доступность( ИмяСервераФлажок );
> ИмяБДФлажок = ?( ИмяСервераФлажок = 1, ИмяСервераФлажок,
> ИмяБДФлажок );
> Форма.ИмяБДФлажок.Доступность( ?( ИмяСервераФлажок = 1,
> 0, 1 ) );
> Форма.ИмяБД.Доступность( ИмяБДФлажок );
> КонецПроцедуры

Что это было, Пух?


 
DiamondShark ©   (2004-04-08 14:14) [178]


> Процедура Доступности()
> Форма.ИмяСервера.Доступность( ИмяСервераФлажок );
> ИмяБДФлажок = ?( ИмяСервераФлажок = 1, ИмяСервераФлажок,
> ИмяБДФлажок );
> Форма.ИмяБДФлажок.Доступность( ?( ИмяСервераФлажок = 1,
> 0, 1 ) );
> Форма.ИмяБД.Доступность( ИмяБДФлажок );
> КонецПроцедуры

Что это было, Пух?


 
VMcL ©   (2004-04-08 15:36) [179]

>>DiamondShark ©  (08.04.04 14:14) [178]

Встроенный язык для 1С:Предприятия 7.7.


 
VMcL ©   (2004-04-08 15:36) [179]

>>DiamondShark ©  (08.04.04 14:14) [178]

Встроенный язык для 1С:Предприятия 7.7.


 
serge35   (2004-04-08 15:45) [180]

> или лучше сразу руки себе отпилить?:

И выучиться на пианиста.


 
serge35   (2004-04-08 15:45) [180]

> или лучше сразу руки себе отпилить?:

И выучиться на пианиста.


 
DiamondShark ©   (2004-04-08 18:25) [181]


> VMcL ©   (08.04.04 15:36) [179]

Ужас...
Я вот тут подумал... а американцы, или англичане, от какого-нибудь visual basic такие же чувства испытывают?


 
DiamondShark ©   (2004-04-08 18:25) [181]


> VMcL ©   (08.04.04 15:36) [179]

Ужас...
Я вот тут подумал... а американцы, или англичане, от какого-нибудь visual basic такие же чувства испытывают?


 
Soft ©   (2004-04-08 18:29) [182]

>>Ihor Osov"yak ©   (08.04.04 12:21) [164]

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

НО!!! Некоторые компиляторы ругаются и выдают варнинги по каждой функции в C++ даже если в ней ничего, ни в параметрах ни в коде, просто в варнингах они указывают ее скомпилировали(каприз разработчика компилятора). На варнинги нужно обращать внимание только тогда, когда ты не особо понимаешь как это все работает. Потому что, делая некоторые вещи нестандартными методами, можно получить выигрыш в скорости в 2-3 раза(было такое), хоть сложность понимания кода возрастает. Так что получается выбор пишем или красиво(пример Longhorn) или функционально(пример FreeBSD). Я всегда выбираю эффективность программы.

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

Как я уже говорил, я придерживаюсь парадигмы Data Flow. Должна быть хорошая документированность метода или данных класса или процедур. Идеально каждую программу описывать на UML, что тоже не является панацеей а скорее костыльками для тех кто привык читать код, а не его функцию. В этом отношении Prolog довольно выгодно отличается от других языков. Если вы попытаетесь понять даже хорошо документированный код на Prolog, вы ничего не поймете, здесь необходимо задействовать принцип функциональных языков "информация на входе"->"функция"->"информация на выходе"(как пример, тот же SQL).

Имея диаграмму потоков данных, при совсем тяжелом случае переписать отдельный модуль или процедуру займет совсем мало времени. Проблема в том, что в больших программных продуктах часто забывают, что у них творится в программе, отсюда и низкая функциональность с высокими требованиями(пример 1C) и разрастание кода и большое количество ошибок. Так что советую всем почитать "Смертельный марш"(если есть желающие могу выслать), который показывает реальные требования к программам.


 
Soft ©   (2004-04-08 18:29) [182]

>>Ihor Osov"yak ©   (08.04.04 12:21) [164]

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

НО!!! Некоторые компиляторы ругаются и выдают варнинги по каждой функции в C++ даже если в ней ничего, ни в параметрах ни в коде, просто в варнингах они указывают ее скомпилировали(каприз разработчика компилятора). На варнинги нужно обращать внимание только тогда, когда ты не особо понимаешь как это все работает. Потому что, делая некоторые вещи нестандартными методами, можно получить выигрыш в скорости в 2-3 раза(было такое), хоть сложность понимания кода возрастает. Так что получается выбор пишем или красиво(пример Longhorn) или функционально(пример FreeBSD). Я всегда выбираю эффективность программы.

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

Как я уже говорил, я придерживаюсь парадигмы Data Flow. Должна быть хорошая документированность метода или данных класса или процедур. Идеально каждую программу описывать на UML, что тоже не является панацеей а скорее костыльками для тех кто привык читать код, а не его функцию. В этом отношении Prolog довольно выгодно отличается от других языков. Если вы попытаетесь понять даже хорошо документированный код на Prolog, вы ничего не поймете, здесь необходимо задействовать принцип функциональных языков "информация на входе"->"функция"->"информация на выходе"(как пример, тот же SQL).

Имея диаграмму потоков данных, при совсем тяжелом случае переписать отдельный модуль или процедуру займет совсем мало времени. Проблема в том, что в больших программных продуктах часто забывают, что у них творится в программе, отсюда и низкая функциональность с высокими требованиями(пример 1C) и разрастание кода и большое количество ошибок. Так что советую всем почитать "Смертельный марш"(если есть желающие могу выслать), который показывает реальные требования к программам.


 
Style ©   (2004-04-08 18:46) [183]

Мне еще понравился встроенный язык турбо бухгалтера
там
ФУНК - это начало функции
а
КНУФ - конец :)))))))))))


 
Style ©   (2004-04-08 18:46) [183]

Мне еще понравился встроенный язык турбо бухгалтера
там
ФУНК - это начало функции
а
КНУФ - конец :)))))))))))


 
Думкин ©   (2004-04-09 07:27) [184]

> Soft ©   (08.04.04 18:29) [182]
>Так что советую всем почитать "Смертельный марш"(если есть желающие
> могу выслать), который показывает реальные требования к
> программам.

А можно? Или положить в доступное место?


 
Думкин ©   (2004-04-09 07:27) [184]

> Soft ©   (08.04.04 18:29) [182]
>Так что советую всем почитать "Смертельный марш"(если есть желающие
> могу выслать), который показывает реальные требования к
> программам.

А можно? Или положить в доступное место?


 
Паниковский ©   (2004-04-09 07:44) [185]

Вообще то вы не обсудили такую тему как эргономика.

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

А если не удобно то программа даже прекрасно написанная в плане стиля так и не будет востребованна что вы о эргономике думаете?


 
Паниковский ©   (2004-04-09 07:44) [185]

Вообще то вы не обсудили такую тему как эргономика.

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

А если не удобно то программа даже прекрасно написанная в плане стиля так и не будет востребованна что вы о эргономике думаете?


 
Думкин ©   (2004-04-09 08:00) [186]

> Паниковский ©   (09.04.04 07:44) [185]

Это уже не к программистам во многом.


 
Думкин ©   (2004-04-09 08:00) [186]

> Паниковский ©   (09.04.04 07:44) [185]

Это уже не к программистам во многом.


 
KSergey ©   (2004-04-09 08:40) [187]

> [185] Паниковский ©   (09.04.04 07:44)

Предлагаю вопрос о "внешности" перенести в другую ветку, т.к. это уже совсем другая история. Совершенно другая.
Если есть желание - заводите соотв. обсуждение.

> Soft ©   (08.04.04 18:29)
> НО!!! Некоторые компиляторы ругаются и выдают варнинги по
> каждой функции в C++ даже если в ней ничего, ни в параметрах
> ни в коде, просто в варнингах они указывают ее скомпилировали

Варининг, что скомпилировали? А что это за компилятор, интересно? Впрочем, есть ли смысл его использовать, если он такой корявый? Ну разве что он единственный под некую платформу... Но давайте все же счтать это отклонением, ага?


 
KSergey ©   (2004-04-09 08:40) [187]

> [185] Паниковский ©   (09.04.04 07:44)

Предлагаю вопрос о "внешности" перенести в другую ветку, т.к. это уже совсем другая история. Совершенно другая.
Если есть желание - заводите соотв. обсуждение.

> Soft ©   (08.04.04 18:29)
> НО!!! Некоторые компиляторы ругаются и выдают варнинги по
> каждой функции в C++ даже если в ней ничего, ни в параметрах
> ни в коде, просто в варнингах они указывают ее скомпилировали

Варининг, что скомпилировали? А что это за компилятор, интересно? Впрочем, есть ли смысл его использовать, если он такой корявый? Ну разве что он единственный под некую платформу... Но давайте все же счтать это отклонением, ага?


 
pasha_golub ©   (2004-04-09 16:23) [188]

Вот тут я имею Ворнинг. Но я то вижу, что все в порядке.


var OldVal: boolean;
begin
 if FWordBreak then
  begin
   ARect := IndentRect(ARect);
   Windows.DrawText(Canvas.Handle, PChar(Cells[ACol, ARow]), length(Cells[ACol, ARow]), ARect, DT_WORDBREAK);
   OldVal := DefaultDrawing;
   DefaultDrawing := False;
  end;
 inherited DrawCell(ACol, ARow, ARect, AState);
 if FWordBreak then
   DefaultDrawing := OldVal;
end;


 
pasha_golub ©   (2004-04-09 16:23) [188]

Вот тут я имею Ворнинг. Но я то вижу, что все в порядке.


var OldVal: boolean;
begin
 if FWordBreak then
  begin
   ARect := IndentRect(ARect);
   Windows.DrawText(Canvas.Handle, PChar(Cells[ACol, ARow]), length(Cells[ACol, ARow]), ARect, DT_WORDBREAK);
   OldVal := DefaultDrawing;
   DefaultDrawing := False;
  end;
 inherited DrawCell(ACol, ARow, ARect, AState);
 if FWordBreak then
   DefaultDrawing := OldVal;
end;


 
Style ©   (2004-04-09 16:30) [189]

А что за ворнинг????


 
Style ©   (2004-04-09 16:30) [189]

А что за ворнинг????


 
Игорь Шевченко ©   (2004-04-09 16:37) [190]

pasha_golub ©   (09.04.04 16:23)

Имеешь.


 
Игорь Шевченко ©   (2004-04-09 16:37) [190]

pasha_golub ©   (09.04.04 16:23)

Имеешь.


 
Юрий Зотов ©   (2004-04-09 16:39) [191]

Паш, а попробуй вот такой вариант:

begin
 if FWordBreak then
 begin
   Windows.DrawText(Canvas.Handle, PChar(Cells[ACol, ARow]), Length(Cells[ACol, ARow]), IndentRect(ARect), DT_WORDBREAK);
   DefaultDrawing := False;
 end
 else inherited DrawCell(ACol, ARow, ARect, AState)
end;

И код попроще, и лишних переменных нет. А может даже и работать будет. А может даже и варнинг пропадет.


 
Юрий Зотов ©   (2004-04-09 16:39) [191]

Паш, а попробуй вот такой вариант:

begin
 if FWordBreak then
 begin
   Windows.DrawText(Canvas.Handle, PChar(Cells[ACol, ARow]), Length(Cells[ACol, ARow]), IndentRect(ARect), DT_WORDBREAK);
   DefaultDrawing := False;
 end
 else inherited DrawCell(ACol, ARow, ARect, AState)
end;

И код попроще, и лишних переменных нет. А может даже и работать будет. А может даже и варнинг пропадет.


 
Style ©   (2004-04-09 16:45) [192]

2 ЮЗ
Я конечно могу ошибаться но
Возможно ругнется на
...,IndentRect(ARect), ..
напишет что здесь должна быть переменная...


 
Style ©   (2004-04-09 16:45) [192]

2 ЮЗ
Я конечно могу ошибаться но
Возможно ругнется на
...,IndentRect(ARect), ..
напишет что здесь должна быть переменная...


 
pasha_golub ©   (2004-04-09 16:49) [193]

Юрий Зотов ©   (09.04.04 16:39) [191]

Не будет. Вернее будет, но нужно сделать иное. Мне нужно перед вызовом inherited

DefaultDrawing := False;

для того чтобы не отрисовывалось всякой каки в методе предка, а потом восстановить исходное значение DefaultDrawing


 
pasha_golub ©   (2004-04-09 16:49) [193]

Юрий Зотов ©   (09.04.04 16:39) [191]

Не будет. Вернее будет, но нужно сделать иное. Мне нужно перед вызовом inherited

DefaultDrawing := False;

для того чтобы не отрисовывалось всякой каки в методе предка, а потом восстановить исходное значение DefaultDrawing


 
pasha_golub ©   (2004-04-09 16:50) [194]

Warning: Variable oldVal may be undefined.

Хотя на самом деле, я ж проверяю чтобы не была андефайнд


 
pasha_golub ©   (2004-04-09 16:50) [194]

Warning: Variable oldVal may be undefined.

Хотя на самом деле, я ж проверяю чтобы не была андефайнд


 
Style ©   (2004-04-09 16:52) [195]


> Warning: Variable oldVal may be undefined.


напиши перед if

OldVal := false;


 
Style ©   (2004-04-09 16:52) [195]


> Warning: Variable oldVal may be undefined.


напиши перед if

OldVal := false;


 
Style ©   (2004-04-09 16:53) [196]


> напишет что здесь должна быть переменная...


точно это var параметр.


 
Style ©   (2004-04-09 16:53) [196]


> напишет что здесь должна быть переменная...


точно это var параметр.


 
pasha_golub ©   (2004-04-09 16:57) [197]

Style ©   (09.04.04 16:53) [196]
Да, если в варианте Юрия, то низзя. Там вар параметр, єто точно.


 
pasha_golub ©   (2004-04-09 16:57) [197]

Style ©   (09.04.04 16:53) [196]
Да, если в варианте Юрия, то низзя. Там вар параметр, єто точно.


 
nikkie ©   (2004-04-09 16:58) [198]

>я ж проверяю чтобы не была андефайнд
откула компилятор может знать, что inherited DrawCell не изменит значения FWordBreak?


 
nikkie ©   (2004-04-09 16:58) [198]

>я ж проверяю чтобы не была андефайнд
откула компилятор может знать, что inherited DrawCell не изменит значения FWordBreak?


 
Style ©   (2004-04-09 17:02) [199]


> pasha_golub ©   (09.04.04 16:57) [197]


напиши перед первым if OldVal := false;
и проверь..


 
Style ©   (2004-04-09 17:02) [199]


> pasha_golub ©   (09.04.04 16:57) [197]


напиши перед первым if OldVal := false;
и проверь..


 
Юрий Зотов ©   (2004-04-09 17:03) [200]

> Style ©   (09.04.04 16:45) [192]

Посмотрел Windows.pas - действительно ругнется. Но совсем не о том речь.

> pasha_golub ©   (09.04.04 16:50) [194]
> я ж проверяю чтобы не была андефайнд

Это тебе так кажется, Паш, а на самом деле ни фига ты не проверяешь. Дело в том, что компилятор совершенно справедливо предполагает, что в результате вызова inherited DrawCell значение FWordBreak могло измениться с False на True - и тогда ты попал, OldVal будет неопределена. О чем он тебе и говорит.

> pasha_golub ©   (09.04.04 16:49) [193]
> нужно сделать иное

Эт-точно. Нужно ввести свойство WordBrake и метод Set для него, а в этом методе синхронно менять DefaultDrawing, как надо. А код, который ты привел, надо сделать даже еще проще:
if WordBreak then DrawText(...) else inherited;
И все.


 
Юрий Зотов ©   (2004-04-09 17:03) [200]

> Style ©   (09.04.04 16:45) [192]

Посмотрел Windows.pas - действительно ругнется. Но совсем не о том речь.

> pasha_golub ©   (09.04.04 16:50) [194]
> я ж проверяю чтобы не была андефайнд

Это тебе так кажется, Паш, а на самом деле ни фига ты не проверяешь. Дело в том, что компилятор совершенно справедливо предполагает, что в результате вызова inherited DrawCell значение FWordBreak могло измениться с False на True - и тогда ты попал, OldVal будет неопределена. О чем он тебе и говорит.

> pasha_golub ©   (09.04.04 16:49) [193]
> нужно сделать иное

Эт-точно. Нужно ввести свойство WordBrake и метод Set для него, а в этом методе синхронно менять DefaultDrawing, как надо. А код, который ты привел, надо сделать даже еще проще:
if WordBreak then DrawText(...) else inherited;
И все.



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

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

Наверх




Память: 1.23 MB
Время: 0.117 c
3-1081942884
AndrewK
2004-04-14 15:41
2004.05.09
Как отрезать время в параметре DateTime?


1-1082103462
scorpi
2004-04-16 12:17
2004.05.09
XP-дизайн.....


14-1082407603
New Brahman
2004-04-20 00:46
2004.05.09
Ne nu ja vse ponimaju - no predel dolgen bit ?


1-1082870985
Артем К.
2004-04-25 09:29
2004.05.09
Проблема с предварительным просмотром в QuickReport


14-1082523056
Kolyan
2004-04-21 08:50
2004.05.09
Turbo Pascal 7.0





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