Переключение на Главную Страницу Страницы: 1 ... 5 6 [7] 8  ОтправитьПечать
Очень популярная тема (более 25 ответов) Повторная передача параметра по умолчанию (число прочтений - 45529 )
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #90 - 27. Июня 2006 :: 05:15
Печать  
kms
Цитата:
Сейчас проверил - нет проблем с передачей наследников в качестве параметров типа базового класса.

Неужто сделали? Вечером попробую.

sedmin
Цитата:
И хотелось бы иметь возможность передать этот признак дальше по цепочке без потери возможности контроля типов.

Ну а как быть с одним единственным параметром, в который я могу передать, скажем, число и строку?
  
Наверх
ICQ  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #91 - 27. Июня 2006 :: 09:06
Печать  
Палыч писал(а) 27. Июня 2006 :: 05:15:
sedmin
Цитата:
И хотелось бы иметь возможность передать этот признак дальше по цепочке без потери возможности контроля типов.

Ну а как быть с одним единственным параметром, в который я могу передать, скажем, число и строку?


Какие число и строку? Только значение указанного типа или Nil (вообще то Nil - это обычно пустой указатель, а пустое значение обычно называют Null).

А этот твой параметр, он со значением по умолчанию или нет?
  
Наверх
 
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #92 - 27. Июня 2006 :: 10:18
Печать  
sedmin
Ну, например, в классе есть метод с одним обязательным параметром:
Код
Выбрать все
процедура Метод1(парам1) экспорт
   если типЗначенияСтр(парам1) = "Строка" тогда
	// обработали строку
   иначеЕсли типЗначенияСтр(парам1) = "Число" тогда
	// обработали число
   конецЕсли;
конецПроцедуры 



Как его описать в хедере, чтобы он мог работать с включенным контролем типов?
  
Наверх
ICQ  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #93 - 27. Июня 2006 :: 12:08
Печать  
Код
Выбрать все
   Void Метод1(Неопределенный парам1);

Процедура Метод1(парам1)
    ТипПараметра=ТипЗначенияСтр(парам1);
    Если (ТипПарметра<>"Строка") И (ТипПараметра<>"Число") Тогда
	   Сам()._ВыброситьИскл("Неверный тип параметра");
    КонецЕсли;
КонецПроцедуры
 



Не думаю, что такие варианты строит встраивать в язык.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #94 - 27. Июня 2006 :: 13:55
Печать  
Palytch
Да уж, подобный полиморфизм как-то не прельщает.

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

De quelle planète es-tu?
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #95 - 27. Июня 2006 :: 14:57
Печать  
Плачущий Плачущий Плачущий

То есть каждый раз прописывать его в коде? А можно и все параметры принимать через Метод(...). Давайте примем это за хороший тон.

Мне нужен один тип и NULL! Неужели так трудно это сделать? Чему это будет мешать? Вот вопрос, на который еще никто не ответил. Все только говорят "Это не наш метод!"

PS. Кстати, давно хотел написать об отложенных исключениях. Чтобы исключение возникало не для той строки, в которой оно возникло, а для вызывающей строки. Вот в данном примере они бы и пригодились. Что скажете?
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #96 - 27. Июня 2006 :: 15:14
Печать  
Цитата:
То есть каждый раз прописывать его в коде? А можно и все параметры принимать через Метод(...). Давайте примем это за хороший тон.

Кстати, да, эта схема будет работать и для Метод(...).

Вопрос, как включать и выключать механизм по необходимости.

Вот в С++ как можно писать:
Код
Выбрать все
#if __DEBUG
   Msg("отладка");
#endif
 



другой вариант:
Код
Выбрать все
const int __debug  = 1;
...
if (__debug)
  Msg(__debug);
 


И тот, и другой вариант в промышленной сборке вырождается в пустой код.
Первый выбрасывается препроцессором, второй - компилятором.

1с - интерпретатор - значит, остается только вариант с препроцессором.
Если это еще не сделано - то можно сделать.
Ну, это все так, в порядке размышлений.

Цитата:
Мне нужен один тип и NULL! Неужели так трудно это сделать? Чему это будет мешать? Вот вопрос, на который еще никто не ответил. Все только говорят "Это не наш метод!"

Так я ж тебе сказал, что я лично не против. Рассматриваем аргументы - процесс идет, стороны высказываются...
Просто смысл в размышлениях перед тем, как сделать, всегда есть. Например, вчера наконец прочитали документацию.

Цитата:
PS. Кстати, давно хотел написать об отложенных исключениях. Чтобы исключение возникало не для той строки, в которой оно возникло, а для вызывающей строки. Вот в данном примере они бы и пригодились. Что скажете?

Я пока не въехал в идею. Печаль
  

De quelle planète es-tu?
Наверх
 
IP записан
 
Deb
1c++ developer
Отсутствует


Sex, drugs and 1C

Сообщений: 41
Зарегистрирован: 21. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #97 - 28. Июня 2006 :: 11:01
Печать  
kms писал(а) 26. Июня 2006 :: 18:12:
fez писал(а) 26. Июня 2006 :: 18:10:
sedmin писал(а) 26. Июня 2006 :: 17:56:
Надо только сделать еще один шаг и разрешить передать этот параметр дальше. Услышь меня.  Улыбка

Давай тогда сделаем шаг еще и в другую сторону. Почему мы ограничиваемся только двумя типами параметров? Давай создадим синтаксис, с помощью которого мы сможем указать, что метод принимает три типа параметров. Четыре типа. Да чего там, неограниченное количество типов!

Тогда и Палыч будет доволен и начнет пользоваться типизацией. Да, Палыч? Подмигивание

А, кстати, я правильно Палыча понимаю, что его не устраивает проверка типов для наследников, если в типизации параметра указать базовый класс?

Т.е. в этом случае сейчас проверка типов не проходит?


Все проходит, не держите меня за идиота...  Подмигивание
  
Наверх
 
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #98 - 28. Июня 2006 :: 11:13
Печать  
Действительно, проходит! Специально проверил.
Давно, когда-то, не проходила. С тех пор и не включал проверку типов.
зы: все-равно пользоваться ей не буду Подмигивание
  
Наверх
ICQ  
IP записан
 
Deb
1c++ developer
Отсутствует


Sex, drugs and 1C

Сообщений: 41
Зарегистрирован: 21. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #99 - 28. Июня 2006 :: 11:14
Печать  
sedmin писал(а) 27. Июня 2006 :: 14:57:
Плачущий Плачущий Плачущий

То есть каждый раз прописывать его в коде? А можно и все параметры принимать через Метод(...). Давайте примем это за хороший тон.

Мне нужен один тип и NULL! Неужели так трудно это сделать? Чему это будет мешать? Вот вопрос, на который еще никто не ответил. Все только говорят "Это не наш метод!"

PS. Кстати, давно хотел написать об отложенных исключениях. Чтобы исключение возникало не для той строки, в которой оно возникло, а для вызывающей строки. Вот в данном примере они бы и пригодились. Что скажете?


Не понимаю в чем проблема, почему нельзя делать так:
void Метод1_СПараметромПоУмолчанию(СписокЗначений Список=СоздатьОбъект("СписокЗначений"));

И типизацией все в порядке и по умолчанию объетк создается и вызывать снова можешь этот же метод, передавая туда этот же параметр.  Ужас
  
Наверх
 
IP записан
 
Deb
1c++ developer
Отсутствует


Sex, drugs and 1C

Сообщений: 41
Зарегистрирован: 21. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #100 - 28. Июня 2006 :: 11:23
Печать  
Палыч писал(а) 28. Июня 2006 :: 11:13:
Действительно, проходит! Специально проверил.
Давно, когда-то, не проходила. С тех пор и не включал проверку типов.
зы: все-равно пользоваться ей не буду Подмигивание

Как угодно... Проверка типов писалась, только для одной цели, чтобы проверять типы передаваемых параметров в РАНТАЙМЕ!
Дело в том, что я как дотошный программист, всегда писал код с проверкой параметров в коде, т.е. приходилось писать что-то вроде:
Процедура ПолучитьСебестоимостьОС(сОС, дНаДату)

Если ТипЗначенияСтр(сОС") <> "Справочник" Тогда
  Сообщить("Ошибка в переданном параметре сОС процедуры ПолучитьСебестоимостьОС");
  Возврат;
КонецЕсли
Если сОС.Вид() <> "ОсновныеСредства" Тогда
  Сообщить("Ошибка в переданном параметре сОС процедуры ПолучитьСебестоимостьОС");
  Возврат;
КонецЕсли


Мне очень сильно надоело писать такие опусы в каждом методе, тем более, что такие проверки нужны только при тестировании, а в коде пользователя они не обязательны и соответственно нет необходимости выполнять лишний код.
  
Наверх
 
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #101 - 28. Июня 2006 :: 11:43
Печать  
Дык, это понятно...
Проблема только в том, что указывать тип "неопределенный" приходится чаще, чем хотелось бы.
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #102 - 28. Июня 2006 :: 11:55
Печать  
В качестве бреда Улыбка
можно использовать для описания типов строки типа
Код
Выбрать все
void Метод(__Число__Строка__КОП__ДругойОбъект Параметр); 


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

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Deb
1c++ developer
Отсутствует


Sex, drugs and 1C

Сообщений: 41
Зарегистрирован: 21. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #103 - 28. Июня 2006 :: 12:26
Печать  
Палыч писал(а) 28. Июня 2006 :: 11:43:
Дык, это понятно...
Проблема только в том, что указывать тип "неопределенный" приходится чаще, чем хотелось бы.


Это как раз повод подумать о дизайне кода...
  
Наверх
 
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #104 - 28. Июня 2006 :: 12:57
Печать  
Deb
Цитата:
Это как раз повод подумать о дизайне кода...

Трудно не согласиться с таким аргументом. Пошел думать. Подмигивание
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 5 6 [7] 8 
ОтправитьПечать