Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Повторная передача параметра по умолчанию (число прочтений - 45528 )
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Повторная передача параметра по умолчанию
23. Июня 2006 :: 16:43
Печать  
Не проходит такой тест. Имеется класс:
Код
Выбрать все
class тестыЗначенияПараметровПоУмолчанию = ЗначенияПараметровПоУмолчанию.txt : ТестовыйСлучай
{
	void Метод1_СПараметромПоУмолчанию(СписокЗначений Список="");
	void Метод2_СПараметромПоУмолчанию(СписокЗначений Список="");
}; 



Имеется реализация:
Код
Выбрать все
Процедура Тест_ПередачаПараметраПоУмолчанию() Экспорт
	миф.УстановитьТекУстановки(, 1,); //Проверка типов
	Сам().Метод1_СПараметромПоУмолчанию();
КонецПроцедуры

Процедура Метод1_СПараметромПоУмолчанию(Список) Экспорт
	Сам().Метод2_СПараметромПоУмолчанию(Список);
КонецПроцедуры

Процедура Метод2_СПараметромПоУмолчанию(Список) Экспорт
КонецПроцедуры

 



Тест падает при вызове Сам().Метод2_СПараметромПоУмолчанию(Список).

Считаю, что это ошибка.
« Последняя редакция: 24. Июня 2006 :: 07:50 - sedmin »  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Параметры по умолчанию
Ответ #1 - 23. Июня 2006 :: 17:05
Печать  
Он "падает" как именно? Ругается на то, что тип не соответствует?
  
Наверх
www  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Параметры по умолчанию
Ответ #2 - 23. Июня 2006 :: 17:45
Печать  
Да, говорит, что не соответствует тип.
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Параметры по умолчанию
Ответ #3 - 23. Июня 2006 :: 18:23
Печать  
Ну так чего же ты хотел?
Тип значения во втором методе какой? Список значений.
А передаешь ты туда чего? Строку.
Совпадает? Нет.
  
Наверх
www  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Параметры по умолчанию
Ответ #4 - 24. Июня 2006 :: 07:49
Печать  
Ну я это, конечно, понимаю. Но я же специально такой тест написал, чтобы было видно откуда ноги растут.

Если я принял параметр как СписокЗначений, то почему я не могу его передать как СписокЗначений?

Не писать же мне такой код:

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



Потому что в данном случае будет некорректным даже такой код:

Код
Выбрать все
Процедура Метод1_СПараметромПоУмолчанию(Список) Экспорт
	Если ПустоеЗначение(Список)=1 Тогда
		Сам().Метод2_СПараметромПоУмолчанию();
	Иначе
		Сам().Метод2_СПараметромПоУмолчанию(Список);
	КонецЕсли; 



fez писал(а) 23. Июня 2006 :: 18:23:
А передаешь ты туда чего? Строку.


И вовсе не строку я туда передаю, а ты_сам_знаешь_что.  Улыбка И с этим я тоже не согласен. Ну ты помнишь.  Улыбка
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #5 - 24. Июня 2006 :: 14:16
Печать  
Я считаю так. Если тебе нужен (Параметр со значением по умолчанию) И (Проверка типов), то надо засовывать в значение по умолчанию значение того же типа.

Вот если тебе НЕ нужна проверка типов, а нужен ТОЛЬКО параметр со значением по умолчанию, то тут попадос, ибо в 1С++ грамотно разрулить это нельзя.

А по поводу "я_сам_знаю_что" - там была какая-то косячина с тем, что пустая строка передается как пустое значение неопределенного типа, но Артур вроде бы ее исправлял.
  
Наверх
www  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #6 - 24. Июня 2006 :: 15:48
Печать  
Цитата:
Я считаю так. Если тебе нужен (Параметр со значением по умолчанию) И (Проверка типов), то надо засовывать в значение по умолчанию значение того же типа.


Если я тебя правильно понял, то ты предлагаешь описывать методы так:
Код
Выбрать все
class тестыЗначенияПараметровПоУмолчанию = ЗначенияПараметровПоУмолчанию.txt : ТестовыйСлучай
{
	void Метод1_СПараметромПоУмолчанию(СписокЗначений Список=СоздатьОбъект("СписокЗначений"));
	void Метод2_СПараметромПоУмолчанию(СписокЗначений Список=СоздатьОбъект("СписокЗначений"));
}; 


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

Цитата:
Вот если тебе НЕ нужна проверка типов, а нужен ТОЛЬКО параметр со значением по умолчанию, то тут попадос, ибо в 1С++ грамотно разрулить это нельзя.


Почему нельзя? Я отключаю проверку типов, и этот тест проходит.

Цитата:
А по поводу "я_сам_знаю_что" - там была какая-то косячина с тем, что пустая строка передается как пустое значение неопределенного типа, но Артур вроде бы ее исправлял.


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

Я предлагаю использовать пустое значение неопределенного типа (Nil, или еще как его называют) как походящее в качестве параметра любого типа.

В качестве примера могу сказать, что при обсуждении с АЛьФом параметров для ИсходнойТаблицы() обсуждались различия при передаче параметров, если параметр пропущен и если параметром передано ПолучитьПустоеЗначение(). Он тогда сказал, что, в принципе, эти случаи можно отличить в исходном коде компоненты, но не стоит этого делать. В этом вопросе я с ним согласен. Думаю, что в данном случае логично поступить так же.

Каждый раз я получаю рекомендации как нужно правильно использовать параметры по умолчанию. Я не утвержаю, что настоящая реализация не пригдна к использованию. Можно, конечно, писать код с ее использованием и обходить все тонкие моменты, возникающие при этом. В принципе, можно совсем не пользоваться параметрами по умолчанию.
Я всего лишь говорю о том, что в настояшем виде параметры по умолчания НЕ УДОБНЫ.

Еще небольшой вопрос. Почему-то против моих предложений изменить использование параметров по умолчанию высказываешься только ты. У тебя много кода завязано на использование их в существующем виде? Или на форуме разработчиков все пришли к единому мнению, и ты его озвучиваешь?
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #7 - 25. Июня 2006 :: 05:40
Печать  
sedmin писал(а) 24. Июня 2006 :: 15:48:
Еще небольшой вопрос. Почему-то против моих предложений изменить использование параметров по умолчанию высказываешься только ты.

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

Нет, честно, я может быть плохо смотрю, но в твоих вопросах по значениям по умолчанию я вижу только "если сделать так и так, то будет вот так", и при этом не вижу "а хочу, чтобы было вот так".

А такой "багрепорт" не может не вызвать традиционного отторжения Улыбка)
  
Наверх
www  
IP записан
 
Палыч
1c++ power user
Отсутствует


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #8 - 25. Июня 2006 :: 07:45
Печать  
sedmin
Зачем, вообще, использовать проверку типов?
  
Наверх
ICQ  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #9 - 26. Июня 2006 :: 06:32
Печать  
fez писал(а) 25. Июня 2006 :: 05:40:
Я не считаю, что я высказываюсь против твоих предложений. Я плохо понимаю суть самих предложений Улыбка


Я же написал: Я предлагаю использовать пустое значение неопределенного типа (Nil, или еще как его называют) как походящее в качестве параметра любого типа.

Еще бы был удобный вариант корректной проверки опущенного параметра, например
Код
Выбрать все
Если Параметр=Nil Тогда 


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

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


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #10 - 26. Июня 2006 :: 06:43
Печать  
Палыч писал(а) 25. Июня 2006 :: 07:45:
Зачем, вообще, использовать проверку типов?


Это ты меня спрашиваешь как пауэр юзер пауэр юзера?  Улыбка

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


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #11 - 26. Июня 2006 :: 08:39
Печать  
sedmin
Вопрос был риторический Подмигивание
Проверка типов - дело хорошее,  только существующий механизм не позволяет
   - использовать перегрузку методов;
   - передавать параметры различных типов, связанных наследованием;
   - передавать пустое значение вместо значения требуемого типа.
Т.е. практически бесполезна.

зы: или я что-то упустил?
  
Наверх
ICQ  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #12 - 26. Июня 2006 :: 08:48
Печать  
sedmin писал(а) 26. Июня 2006 :: 06:32:
Хотя в целом я ставлю вопрос не так. Я привел ситуацию, в которой, как я считаю, не должно возникать ошибки, а она возникает. Один из вариантов решения я привел выше. Но, может быть, у вас есть другие варианты. Или вы все же убедите меня в том, что ошибка возникает вполне корректно. Но тогда я бы хотел увидеть ваш вариант решения приведенной проблемы. Возможно, он окажется лучше того, что предлагаю я.

Мне кажется, что более логичным (с точки зрения существующей концепции 1С++) было бы отвязать значения параметров по умолчанию от их типизации.
Просто сейчас мы синтаксически не можем написать просто
Код
Выбрать все
Метод1_СПараметромПоУмолчанию(Список=СоздатьОбъект("СписокЗначений")); 


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

Если с типизацией самого метода еще туда-сюда, то вот для параметров я стараюсь в таких ситуациях использовать тип значения "Неопределенный". Ведь если в параметре может быть и строка и список значений, то это как раз тот случай.
  
Наверх
www  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #13 - 26. Июня 2006 :: 09:01
Печать  
Палыч писал(а) 26. Июня 2006 :: 08:39:
Проверка типов - дело хорошее,  только существующий механизм не позволяет
  - использовать перегрузку методов;
  - передавать параметры различных типов, связанных наследованием;
  - передавать пустое значение вместо значения требуемого типа.


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

При реализации п. 3 никаких проблем возникнуть не должно. (Как я себе это представляю.)

П. 2 реализовать посложнее, но возможно. Мне, например, в паре мест уже пришлось это сделать самому.
  
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #14 - 26. Июня 2006 :: 09:07
Печать  
fez писал(а) 26. Июня 2006 :: 08:48:
Ведь если в параметре может быть и строка и список значений, то это как раз тот случай.

Ну вот. О чем я и говорил ранее. Существующий способ описания параметров ввоздит в заблуждение.

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



Посему еще одно предложение: Предлагаю реализовать возможность использования приведенной выше записи.

И еще одно, для более отдаленного будущего: Если в описании параметра по умолчания написано ="", то он должне принимать значение <пустая строка>.
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #15 - 26. Июня 2006 :: 09:07
Печать  
sedmin писал(а) 26. Июня 2006 :: 09:01:
Перегрузка методов и параметры по умолчанию - два (почти) альтернативных способа решения одной проблемы.

С этого места поподробнее. Что за проблема?
  
Наверх
www  
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #16 - 26. Июня 2006 :: 09:15
Печать  
fez писал(а) 26. Июня 2006 :: 09:07:
sedmin писал(а) 26. Июня 2006 :: 09:01:
Перегрузка методов и параметры по умолчанию - два (почти) альтернативных способа решения одной проблемы.

С этого места поподробнее. Что за проблема?


В ранних языках использовался механизм параметров по умолчания. После появления механизма перегрузки методов эти два механизма стали конфликтовать.

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

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #17 - 26. Июня 2006 :: 10:21
Печать  
fez писал(а) 24. Июня 2006 :: 14:16:
Вот если тебе НЕ нужна проверка типов, а нужен ТОЛЬКО параметр со значением по умолчанию, то тут попадос, ибо в 1С++ грамотно разрулить это нельзя.

Можешь напомнить почему? Сейчас нельзя или в принципе нельзя?

Цитата:
В "продвинутых" языках отключены параметры по умолчанию.

Да ладно тебе, ты все яву с шарпом в пример приводишь. Бери реально продвинутые языки.
Вот в 1С, к примеру, параметры по умолчанию есть, а перегрузки - нет  Смех

И по существу.
1. Я никак не возьму в толк, зачем нужен неопределенный пустой?
Если ты указал, что у тебя параметр типа СписокЗначений, причем тут неопределенный?
ИМХО при вызове 1cpp должен создать СписокЗначений и передать его в метод.

Если нужен неопределенный, так и нужно писать - неопределенный.
В этом случае 1СPP просто создаст неопределенную переменную и передаст ее в метод.

Или я чего-то не понимаю?

2.
Код
Выбрать все
void Метод1_СПараметромПоУмолчанию(СписокЗначений Список=);
 


Такая запись не нравится мне, если честно.
СписокЗначений Список="" - вполне нормальная запись, должна означать необходимость 1cpp при вызове создать новый объект типа СписокЗначений.

Твоя запись ну как-то вообще в семантике общеизвестных языков не применяется.

P.S.
Разговор не о том, как есть, а о том, как могло бы быть и как было бы правильно.
А то щас скажете, что в действительности все не так, как на самом деле.
  

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


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #18 - 26. Июня 2006 :: 10:52
Печать  
Хорошо. Давайте сделаем такую запись:
Код
Выбрать все
void Метод1_СПараметромПоУмолчанию(СписокЗначений Список=Nil); 



Можно Nil по-другому обозвать. Только не надо предлагать сделать СписокЗначений Список=ПолучитьПустоеЗначение(). К тому же такой вариант все равно не прокатит.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #19 - 26. Июня 2006 :: 11:03
Печать  
Нет, подожди.

Цитата:
Я предлагаю использовать пустое значение неопределенного типа (Nil, или еще как его называют) как походящее в качестве параметра любого типа.

Какое отношение Nil имеет к типу СписокЗначений?
Указывая Nil мы отказываемся от проверки типов?
Тогда и надо писать

Код
Выбрать все
void Метод1_СПараметромПоУмолчанию([b]Неопределенный[/b] Парам="");
 



"" - это не строка и не пустое значение. Это директива интерпретатору на создание переменной указанного типа (в данном случае - 'неопределенный') при вызове без явного указания параметра.

Если нужна пустая строка, должно быть
Код
Выбрать все
void Метод1_СПараметромПоУмолчанию([b]Строка[/b] Строка="");
 



Если нужно значение объекта, должно быть
Код
Выбрать все
void Метод1_СПараметромПоУмолчанию([b]Общие.Форма.Привязка[/b] офп="");
 


В этом случае офп должно инициализироваться значением класса (сконструированное по умолчанию). Но это уже не пустое значение.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #20 - 26. Июня 2006 :: 12:10
Печать  
kms писал(а) 26. Июня 2006 :: 11:03:
Если нужно значение объекта, должно быть
Код
Выбрать все
void Метод1_СПараметромПоУмолчанию([b]Общие.Форма.Привязка[/b] офп="");
 


В этом случае офп должно инициализироваться значением класса (сконструированное по умолчанию). Но это уже не пустое значение.


Я так думаю, что в ситуации, когда мы в параметре указываем тип значения - "Общие.Форма.Привязка", а в значении по умолчанию - строку (""), то в языке без строгой типизации (каковым безусловно является 1С) нужно произвести приведение типов. То есть мы должны Строку "" привести к типу "Общие.Форма.Привязка".
То есть это я к тому, чтобы можно было передавать как значения по умолчанию не только объекты, сконструированные по умолчанию. Чтобы запись
Код
Выбрать все
void Метод1_СПараметромПоУмолчанию(СписокЗначений офп="{VL,1,""Один""}"); 


тоже была валидной.
Как это сделать без конструкторов с параметрами - я не представляю.

А уж как быть в аналогичной ситуации со встроенными объектами (с тем же списком значений) - не представляю вдвойне.
  
Наверх
www  
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #21 - 26. Июня 2006 :: 12:16
Печать  
небольшая поправка по поводу
void Метод1_СПараметромПоУмолчанию(Неопределенный Парам="");

эксперимент показал, что
1) когда Парам = ""  , в самом методе мы получим значение типа ""
2) Парам = "111" - в методе опять же пустое значение с типом ""
3) Парам = 111 - в методе получим число 111
4) Парам = ПолучитьПустоеЗначение("Справочник") - в методе получим пустое значение типа "Справочник"
5) Парам = ПолучитьПустоеЗначение("СписокЗначений") - в методе получим пустое значение типа ""
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #22 - 26. Июня 2006 :: 12:20
Печать  
ADirks писал(а) 26. Июня 2006 :: 12:16:
эксперимент показал, что...

полный бардак Улыбка
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #23 - 26. Июня 2006 :: 12:23
Печать  
Не, Федор, чуть не о том речь.

Я имею в виду, что записывая
Цитата:
void Метод1_СПараметромПоУмолчанию(Общие.Форма.Привязка офп="");

речи о передачи строки вообще не идет.

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

Т.е. простой вызов
Цитата:
Метод1_СПараметромПоУмолчанию()
приведет к инициализации офп значением нового объекта класса Общие.Форма.Привязка, созданного конструктором по умолчанию.

Другое дело, что должен делать интерпретатор при таком вызове
Цитата:
Метод1_СПараметромПоУмолчанию("")
или
Метод1_СПараметромПоУмолчанию(0)

Здесь возможны 3 варианта:
1. Можно считать, что переданное пустое значение равносильно неуказанию параметра.
В этом случае должна произойти стандартная инициализация переменной офп новым значением класса

2. Можно пытаться приводить значения, но я не представляю себе, как можно привести строку в объект.
Нет, конечно, можно выполнить поиск конкретного конструктора объекта с указанным параметром (типа строка в данном случае). Но если честно, я не сторонник подобных неявных решений, от них одни проблемы.
Если тебе нужен конкретный офп, созданный из строки - будь любезен, вызови явно нужный конструктор и явно передай его в метод.

3. Можно обламывать сразу на несоответствии типов.

Собственно, мне представляются п. 1 и п. 3. вполне адекватными.
  

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


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #24 - 26. Июня 2006 :: 12:26
Печать  
Да, чё-то тут не то....
и ещё вдогонку
6) Строка Парам = "" - в методе получим пустое значение с типом "Строка"
7) Число Парам = '01.01.2006' - в методе получим эту самую дату
8) Число Парам = "321" - в методе получим строку "321"

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #25 - 26. Июня 2006 :: 12:29
Печать  
ADirks писал(а) 26. Июня 2006 :: 12:16:
небольшая поправка по поводу
void Метод1_СПараметромПоУмолчанию(Неопределенный Парам="");

эксперимент показал, что
1) когда Парам = ""  , в самом методе мы получим значение типа ""
2) Парам = "111" - в методе опять же пустое значение с типом ""
3) Парам = 111 - в методе получим число 111
4) Парам = ПолучитьПустоеЗначение("Справочник") - в методе получим пустое значение типа "Справочник"
5) Парам = ПолучитьПустоеЗначение("СписокЗначений") - в методе получим пустое значение типа ""


Действительно, это труднопонимаемо. Улыбка

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

Единственно, я даже не смотрел, как реализовано сейчас.
Сначала бы определиться как должно быть.
  

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


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #26 - 26. Июня 2006 :: 12:35
Печать  
и ещё вдогонку
9) Неопределенный П1 = ПолучитьПустоеЗначение("Строка")  - в методе наконец-то получим пустое значение типа "Строка"

Насколько я понимаю, в 1С++ нет строгой типизации, а есть лишь контроль типов - и он опционален. Хочешь включил, а хочешь не включил.  В обоих случаях параметры по умолчанию должны вести себя совершенно одинаково.

Да и какая нафик типизация в языке, изначально нетипизированном? Только рантайм контроль, и ничего более.
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #27 - 26. Июня 2006 :: 12:37
Печать  
kms писал(а) 26. Июня 2006 :: 12:23:
Я имею в виду, что записывая
Цитата:
void Метод1_СПараметромПоУмолчанию(Общие.Форма.Привязка офп="");

речи о передачи строки вообще не идет.

Я рассматриваю эту запись, именно как семантику инициализации значения по умолчанию значением конкретного типа.

Мне не нравится такая семантика. Уж лучше Nil определить. Хотя Nil мне тоже не нравится.
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #28 - 26. Июня 2006 :: 12:38
Печать  
А просветите меня, плз

это так сейчас в объявлении класса можно писать, да? я просто никогда так не писал.
Цитата:
4) Парам = ПолучитьПустоеЗначение("Справочник") - в методе получим пустое значение типа "Справочник"
5) Парам = ПолучитьПустоеЗначение("СписокЗначений") - в методе получим пустое значение типа ""


А для непустых значений как писать?
Скажем, я хочу получить пустую IndexedTable, мне как писать?

Я думал, вот так нормально будет
Цитата:
void Метод1_СПараметромПоУмолчанию(IndexedTable ит="");

На семантике ит="" я не настаиваю, но это не Nil, а директива создания объекта.
Т.е. можно так сделать
Цитата:
void Метод1_СПараметромПоУмолчанию(IndexedTable ит=ИндексированнаяТаблица(парам1), Число парам1);

Означает необходимость создания объекта ит и его инициализацию путем вызова конструктора (если найден) с подходящей сигнатурой.
  

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


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #29 - 26. Июня 2006 :: 12:38
Печать  
kms писал(а) 26. Июня 2006 :: 12:29:
ADirks писал(а) 26. Июня 2006 :: 12:16:
небольшая поправка по поводу
void Метод1_СПараметромПоУмолчанию(Неопределенный Парам="");

эксперимент показал, что
1) когда Парам = ""  , в самом методе мы получим значение типа ""
2) Парам = "111" - в методе опять же пустое значение с типом ""
3) Парам = 111 - в методе получим число 111
4) Парам = ПолучитьПустоеЗначение("Справочник") - в методе получим пустое значение типа "Справочник"
5) Парам = ПолучитьПустоеЗначение("СписокЗначений") - в методе получим пустое значение типа ""


Действительно, это труднопонимаемо. Улыбка

А почему труднопонимаемо?  Всё, что имеет ТипЗначения(Значение) < 100 - можно подсовывать в параметры по умолчанию. А ежели ТипЗначения(Значение) == 100  - то такие типы не подсунешь.
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #30 - 26. Июня 2006 :: 12:40
Печать  
kms писал(а) 26. Июня 2006 :: 12:38:
А просветите меня, плз

это так сейчас в объявлении класса можно писать, да? я просто никогда так не писал.
Цитата:
4) Парам = ПолучитьПустоеЗначение("Справочник") - в методе получим пустое значение типа "Справочник"
5) Парам = ПолучитьПустоеЗначение("СписокЗначений") - в методе получим пустое значение типа ""

Ага, можно, не помню с какого релиза, но весьма давно.  ПолучитьПустоеЗначение() можно, а вот СоздатьОбъект() - нельзя. И всякие там глобальные объекты тоже нельзя.
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #31 - 26. Июня 2006 :: 12:46
Печать  
ADirks писал(а) 26. Июня 2006 :: 12:40:
Ага, можно, не помню с какого релиза, но весьма давно.  ПолучитьПустоеЗначение() можно, а вот СоздатьОбъект() - нельзя. И всякие там глобальные объекты тоже нельзя.

А вот тут я наврал.  Глобальные переменные можно использовать, причём любых типов!  Значение подставляется  при вызове.
И ещё интереснее:
Неопределенный П1 = ФИО(глПользователь) - в методе получим строку
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #32 - 26. Июня 2006 :: 12:52
Печать  
Да, интересно.

А как считаете, вот это:
Цитата:
Неопределенный П1 = ФИО(глПользователь) - в методе получим строку

не извращение разве? ну это я так.
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #33 - 26. Июня 2006 :: 12:56
Печать  
Цитата:
То есть это я к тому, чтобы можно было передавать как значения по умолчанию не только объекты, сконструированные по умолчанию. Чтобы запись
Код
Выбрать все
void Метод1_СПараметромПоУмолчанию(СписокЗначений офп="{VL,1,""Один""}"); 


тоже была валидной.
Как это сделать без конструкторов с параметрами - я не представляю.

А уж как быть в аналогичной ситуации со встроенными объектами (с тем же списком значений) - не представляю вдвойне.

Такая запись инициализатора мне представляется также извращением.
А если нужен список на 100 персон? Ужос.

А вызов конструктора наследника СпискаЗначений не решит вопроса?
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #34 - 26. Июня 2006 :: 12:59
Печать  
Скажем, вот так:

Цитата:
void Метод1_СПараметромПоУмолчанию(СписокЗначений сп=НаследникСП("гости"));


В классе НаследникСП определяем конструктор, с одним параметром типа "строка".
Он инициализирует и возвращает объект в сп.
  

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


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #35 - 26. Июня 2006 :: 13:00
Печать  
kms писал(а) 26. Июня 2006 :: 12:52:
Да, интересно.

А как считаете, вот это:
Цитата:
Неопределенный П1 = ФИО(глПользователь) - в методе получим строку

не извращение разве? ну это я так.

Ну вообще-то да, извращение. Но как я понимаю, это просто некий компромисс, позволяющий иметь параметры по умолчанию типа "Справочник.Контрагенты".  Ну нету в 1С константных выражений, позволяющих получить значение такого типа. И пришлось позволить ПолучитьПустоеЗначение(), и, как следствие, вообще любое выражение, возвращающее какое-то значение.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #36 - 26. Июня 2006 :: 13:02
Печать  
ADirks писал(а) 26. Июня 2006 :: 12:38:
А почему труднопонимаемо?  Всё, что имеет ТипЗначения(Значение) < 100 - можно подсовывать в параметры по умолчанию. А ежели ТипЗначения(Значение) == 100  - то такие типы не подсунешь.


Мне сложно воспринять вот это:
2) Парам = "111" - в методе опять же пустое значение с типом ""
5) Парам = ПолучитьПустоеЗначение("СписокЗначений") - в методе получим пустое значение типа ""

П. 2 не понятен, а п.5 - вообще не понятен. Улыбка
Что такое ПолучитьПустоеЗначение("СписокЗначений"), никак не представлю себе наглядно...
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #37 - 26. Июня 2006 :: 13:04
Печать  
ADirks писал(а) 26. Июня 2006 :: 13:00:
kms писал(а) 26. Июня 2006 :: 12:52:
Да, интересно.

А как считаете, вот это:
Цитата:
Неопределенный П1 = ФИО(глПользователь) - в методе получим строку

не извращение разве? ну это я так.

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

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

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #38 - 26. Июня 2006 :: 13:06
Печать  
т.е. в примере Федора
Цитата:
void Метод1_СПараметромПоУмолчанию(СписокЗначений офп="{VL,1,""Один""}");

мы должны написать что-то типа
Цитата:
void Метод1_СПараметромПоУмолчанию(СписокЗначений офп=глСписокОдин());

Так?
  

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


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #39 - 26. Июня 2006 :: 13:11
Печать  
Цитата:
Мне сложно воспринять вот это:
2) Парам = "111" - в методе опять же пустое значение с типом "" 
5) Парам = ПолучитьПустоеЗначение("СписокЗначений") - в методе получим пустое значение типа ""

Про п. 1) и 2) я же и говорю, что так вроде не должно быть.  В методе должна быть строка.
А п.5 - это я так, изгилялся. И тут всё правильно, 1С не умеет конструировать пустые значения таких типов. Я вообще- то думал, что оно просто свалится на этом, но почему-то не свалилось...

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

Ага, можем.  Только значения по умолчанию, насколько я понимаю, к ООП никакого отношения не имеют.  Это просто значения по умолчанию  Улыбка
В нормальных языках (опять же, как я понимаю) значения по умолчанию должны задаваться константными выражениями. Ну а в 1С++ вот так вот  Улыбка
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #40 - 26. Июня 2006 :: 13:12
Печать  
kms писал(а) 26. Июня 2006 :: 13:06:
т.е. в примере Федора
Цитата:
void Метод1_СПараметромПоУмолчанию(СписокЗначений офп="{VL,1,""Один""}");

мы должны написать что-то типа
Цитата:
void Метод1_СПараметромПоУмолчанию(СписокЗначений офп=глСписокОдин());

Так?

Ага
И любой желающий может назаводить себе всевозможных Nil, NULL, Nothing и Empty как ему заблагорассудится  Улыбка))
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #41 - 26. Июня 2006 :: 13:14
Печать  
Алексей, я надеюсь, что данный код ты оформил в виде юнит-тестов? Улыбка
И прошу отметиться по этому поводу в багзилле Улыбка  Смех
  

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


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #42 - 26. Июня 2006 :: 13:16
Печать  
ADirks писал(а) 26. Июня 2006 :: 13:12:
И любой желающий может назаводить себе всевозможных Nil, NULL, Nothing и Empty как ему заблагорассудится  Улыбка))

Вот собственно именно поэтому мне и не нравились предложения sedmin'а Улыбка
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #43 - 26. Июня 2006 :: 13:20
Печать  
Леша, по инициализаторам я понял.
Цитата:
Ага, можем.  Только значения по умолчанию, насколько я понимаю, к ООП никакого отношения не имеют.  Это просто значения по умолчанию Улыбка

Ну как бы к ООП имеет отношение понятие инкапсуляции, а тут мы делаем привязку классов к глобальному модулю... Мда.

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

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


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

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

Цитата:
void Метод1_СПараметромПоУмолчанию(СписокЗначений сп="");

Такая запись означает создание дефолтного СпискаЗначений и передачу его в параметр сп, если при вызове метода параметр не указан.
На записи ="" не настаиваю, семантику можно поменять на "СоздатьОбъект()", например.

Смысл - в отвязке параметров от гл. модуля.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #45 - 26. Июня 2006 :: 13:33
Печать  
kms писал(а) 26. Июня 2006 :: 13:24:
Цитата:
void Метод1_СПараметромПоУмолчанию(СписокЗначений сп="");

Такая запись означает создание дефолтного СпискаЗначений и передачу его в параметр сп, если при вызове метода параметр не указан.


Согласен с таким вариантом.
  

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


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #46 - 26. Июня 2006 :: 13:41
Печать  
kms писал(а) 26. Июня 2006 :: 13:24:
Дядьки, ну давайте, тогда, резюме моей идее вынесем:

Цитата:
void Метод1_СПараметромПоУмолчанию(СписокЗначений сп="");

Такая запись означает создание дефолтного СпискаЗначений и передачу его в параметр сп, если при вызове метода параметр не указан.
На записи ="" не настаиваю, семантику можно поменять на "СоздатьОбъект()", например.

Смысл - в отвязке параметров от гл. модуля.

Мне кажется, что это всё же лишнее.  Это уже будет кусочек настоящего контроля типов. И неравноправие опять же: почему для СписокЗначения Парам = "" мы получим пустой список значения, а для Неопределенный Парам = .... список значения получим только путём извращений?  Нерегулярность, панимаишь...
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #47 - 26. Июня 2006 :: 13:44
Печать  
ADirks

да, ты прав. а если не ="", а =СоздатьОбъект(...), причем возможно с параметрами - как тебе?

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

эксперимент показал, что
1) когда Парам = ""  , в самом методе мы получим значение типа ""

Почему п. 1 неправильный?
Потому что не строка, а именно неопределенный, так?

P.S.
Хотя вообще тип "Неопределенный" - это по-моему плоховато Улыбка
  

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


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #48 - 26. Июня 2006 :: 13:51
Печать  
kms писал(а) 26. Июня 2006 :: 13:44:
ADirks

да, ты прав. а если не ="", а =СоздатьОбъект(...), причем возможно с параметрами - как тебе?

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

эксперимент показал, что
1) когда Парам = ""  , в самом методе мы получим значение типа ""

Почему п. 1 неправильный?
Потому что не строка, а именно неопределенный, так?

P.S.
Хотя вообще тип "Неопределенный" - это по-моему плоховато Улыбка

СоздатьОбъект() метод какой-то странный.  Он не желает работать в качестве значения по умолчанию.  И если написать типа
н = СоздатьОбъект("СписокЗначений").РазмерСписка();
то синтакс контроль модуля почему-то не проходит.

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


I Love 1Cv8!

Сообщений: 217
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #49 - 26. Июня 2006 :: 14:11
Печать  
kms
Паттерны уже изучил - опять заняться нечем? Подмигивание

all
Параметры по умолчанию: для нормальной работы всё уже есть, ничего изобретать не надо!  Пользуйтесь "неопределенным количеством параметров"!

Контроль типов: если механизм не обеспечивает фичи, описанные в моём первом сообщении, он не нужен в принципе.

зы: Описывать инициализацию значения в хедере класса - это перебор! Достаточно знать, что параметр не специфицирован при вызове. (С чем непринужденно справляется, то, о чём я писал выше).
  
Наверх
ICQ  
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #50 - 26. Июня 2006 :: 14:27
Печать  
kms писал(а) 26. Июня 2006 :: 13:24:
Дядьки, ну давайте, тогда, резюме моей идее вынесем:

Давайте сначала просто поймем: для чего нам нужен контроль типов? И нужен ли нам вообще контроль типов в  насквозь нетипизированном языке?

И еще расскажу по секрету, что  deb делал этот самый контроль типов для ловли ошибок.
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #51 - 26. Июня 2006 :: 16:03
Печать  
Палыч писал(а) 26. Июня 2006 :: 14:11:
kms
Паттерны уже изучил - опять заняться нечем? Подмигивание

В процессе Улыбка

Цитата:
Контроль типов: если механизм не обеспечивает фичи, описанные в моём первом сообщении, он не нужен в принципе.

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

Цитата:
зы: Описывать инициализацию значения в хедере класса - это перебор! Достаточно знать, что параметр не специфицирован при вызове. (С чем непринужденно справляется, то, о чём я писал выше).

А дальше в самом классе разбираться с инициализацией?
Ничего не говорю, это рабочее решение. Но тут как раз проверка типов совсем лесом-полем идет.
  

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


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #52 - 26. Июня 2006 :: 16:26
Печать  
Согласен с Палычем.
Цитата:
Описывать инициализацию значения в хедере класса - это перебор!

Вы забываете, что какой бы мы объект в параметре ни создали, он никому не нужен. Что бы с ним ни делали, его не смогут получить там, где этот метод вызвали. Таким образом

Цитата:
Достаточно знать, что параметр не специфицирован при вызове. (С чем непринужденно справляется, то, о чём я писал выше).


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

Код
Выбрать все
class тестыЗначенияПараметровПоУмолчанию = ЗначенияПараметровПоУмолчанию.txt : ТестовыйСлучай
{
	void Метод(СписокЗначений Список="");
};

Процедура Метод(Список) Экспорт
	Сам().Метод(Список);
КонецПроцедуры
 



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

Или в качестве параметра, у которого имеется значение по умолчанию.
  
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #53 - 26. Июня 2006 :: 16:37
Печать  
fez писал(а) 26. Июня 2006 :: 13:16:
ADirks писал(а) 26. Июня 2006 :: 13:12:
И любой желающий может назаводить себе всевозможных Nil, NULL, Nothing и Empty как ему заблагорассудится  Улыбка))

Вот собственно именно поэтому мне и не нравились предложения sedmin'а Улыбка


Да, батеНька, вы знаЕте толк в извращениях.  Улыбка

А если я в глобальнике забыл проинициализировать переменную NIL?  Смех Смех Смех
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #54 - 26. Июня 2006 :: 16:44
Печать  
sedmin писал(а) 26. Июня 2006 :: 16:26:
Вы забываете, что какой бы мы объект в параметре ни создали, он никому не нужен. Что бы с ним ни делали, его не смогут получить там, где этот метод вызвали.

Ну, то, что его нельзя вернуть, не означает, что он не нужен.

Цитата:
Я предлагаю пустое значение неопределенного типа принимать в качестве параметра любого типа. Улыбка
Или в качестве параметра, у которого имеется значение по умолчанию.

Ну, если не инициализировать в объявлении, можно инициализировать в самом методе.
Проверь 1 раз на пустое значение и инициализируй пустым списком, если парамтр не специфицирован.

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

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #55 - 26. Июня 2006 :: 16:47
Печать  
sedmin писал(а) 26. Июня 2006 :: 16:37:
fez писал(а) 26. Июня 2006 :: 13:16:
ADirks писал(а) 26. Июня 2006 :: 13:12:
И любой желающий может назаводить себе всевозможных Nil, NULL, Nothing и Empty как ему заблагорассудится  Улыбка))

Вот собственно именно поэтому мне и не нравились предложения sedmin'а Улыбка


Да, бательнька, вы знаеете толк в извращениях.  Улыбка

А если я в глобальнике забыл проинициализировать переменную NIL?  Смех Смех Смех

В этом случае ты сам редиска - нехороший человек.

И поясни, пожалуйста, кто такой бательнька и каким способом он знаеет толк в извращениях.
А то, может быть, мы бы тоже желали приобщиться, да пока не в курсе как Улыбка

Шутка.
  

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


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #56 - 26. Июня 2006 :: 16:58
Печать  
kms писал(а) 26. Июня 2006 :: 16:44:
sedmin писал(а) 26. Июня 2006 :: 16:26:
Вы забываете, что какой бы мы объект в параметре ни создали, он никому не нужен. Что бы с ним ни делали, его не смогут получить там, где этот метод вызвали.

Ну, то, что его нельзя вернуть, не означает, что он не нужен.


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

Цитата:
Ну, если не инициализировать в объявлении, можно инициализировать в самом методе.
Проверь 1 раз на пустое значение и инициализируй пустым списком, если парамтр не специфицирован.

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


А если это не список, а КОП, то потом я буду писать такой код

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


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

А как зайти в тыл 1С++ я и сам знаю.  Улыбка Зачем мне каждый раз писать код в обход этого дела?

Я предлагаю простое решение для возникшей ситуации.

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

А если согласны - предложите красивый способ ее решения.

PS. На последок у меня есть еще одна пенка с параметрами по умолчанию. Но я отложу ее на потом.  Улыбка
  
Наверх
 
IP записан
 
sedmin
1c++ developer
Отсутствует


I Hate Fat YaBB 2!

Сообщений: 862
Зарегистрирован: 24. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #57 - 26. Июня 2006 :: 17:01
Печать  
kms писал(а) 26. Июня 2006 :: 16:47:
И поясни, пожалуйста, кто такой бательнька и каким способом он знаеет толк в извращениях.
А то, может быть, мы бы тоже желали приобщиться, да пока не в курсе как Улыбка

Шутка.


Fixed.   Смех
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Повторная передача параметра по умолчанию
Ответ #58 - 26. Июня 2006 :: 17:10
Печать  
sedmin писал(а) 26. Июня 2006 :: 16:58:
А если согласны - предложите красивый способ ее решения.

Не использовать кнопку "Проверка типов".
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Повторная передача параметра по умолчанию
Ответ #59 - 26. Июня 2006 :: 17:12
Печать  
sedmin писал(а) 26. Июня 2006 :: 16:58:
kms писал(а) 26. Июня 2006 :: 16:44:
Ну, то, что его нельзя вернуть, не означает, что он не нужен.


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

Запросто.
Предположим, у меня метод, в который передается список приглашенных на свадьбу.
  • void ЗарезервироватьМеста(СписокЗначений сп="")

    Я делаю 1 раз как-то так:
    Код
    Выбрать все
    Если ПустоеЗначение(сп) =1 Тогда
      // параметр не специфицирован
      сп =СоздатьОбъект("СписокЗначений");
      сп.ИзСтрокиСРазделителями("молодой, молодая, пастор шлаг");
    КонецЕсли;
     
    
    


    И весь оставшийся код не требует никаких проверок на пустое значение.
    Т.е. я продолжаю работать со своим стандартным интерфейсом.

    Цитата:
    А если это не список, а КОП, то потом я буду писать такой код

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

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

    1. ты создаешь объект "КОП" 1 раз, дальше его используешь
    2. никаких проверок Параметр.Пустой() после создания при хорошем дизайне не должно бы быть
    3. при рекурсивном вызове у тебя объект уже не будет создаваться - он уже не пустой, а конкретный объект "КОП".

    т.е. накладные расходы - 1 раз на инициализацию неспецифицированного объекта, независимо от уровня рекурсии.
  •   

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


    I Hate Fat YaBB 2!

    Сообщений: 862
    Зарегистрирован: 24. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #60 - 26. Июня 2006 :: 17:12
    Печать  
    fez писал(а) 26. Июня 2006 :: 17:10:
    Не использовать кнопку "Проверка типов".


    Да, интересные у вас тут представления о красивых способах...  Улыбка

    Впрочем, мне их тут уже несколько посоветовали.  Улыбка
      
    Наверх
     
    IP записан
     
    fez
    Forum Administrator
    1c++ power user
    Отсутствует


    I wanted to cry, but the
    tears wouldn't come

    Сообщений: 2712
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: Повторная передача параметра по умолчанию
    Ответ #61 - 26. Июня 2006 :: 17:18
    Печать  
    sedmin писал(а) 26. Июня 2006 :: 17:12:
    fez писал(а) 26. Июня 2006 :: 17:10:
    Не использовать кнопку "Проверка типов".

    Да, интересные у вас тут представления о красивых способах...  Улыбка

    Я еще раз спрашиваю: Зачем нужно использовать проверку типов в насквозь нетипизированном языке?
      
    Наверх
    www  
    IP записан
     
    sedmin
    1c++ developer
    Отсутствует


    I Hate Fat YaBB 2!

    Сообщений: 862
    Зарегистрирован: 24. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #62 - 26. Июня 2006 :: 17:23
    Печать  
    kms писал(а) 26. Июня 2006 :: 17:12:
    И весь оставшийся код не требует никаких проверок на пустое значение.
    Т.е. я продолжаю работать со своим стандартным интерфейсом.


    Считаю, что пример надуманный. Как параметр список не нужен. С тем же успехом можно завести переменную ЛокальныйСписок.

    Цитата:
    1. ты создаешь объект "КОП" 1 раз, дальше его используешь
    2. никаких проверок Параметр.Пустой() после создания при хорошем дизайне не должно бы быть
    3. при рекурсивном вызове у тебя объект уже не будет создаваться - он уже не пустой, а конкретный объект "КОП".


    Прикол в том, что мне этот параметр здесь не нужен - я передаю его транзитом. А передать не могу, не последовав совету Федора.

    Либо надо будет создать новый пустой объект именно для передачи в качестве параметра по умолчанию. Вот тогда то в Методе2 мне и придется проверять 2 раза: а не пустое ли это значение? а не пустой ли это объект КОП, созданный для передали параметра?

    Лажа да и только. Уж лучше отключить проверку типов.
      
    Наверх
     
    IP записан
     
    fez
    Forum Administrator
    1c++ power user
    Отсутствует


    I wanted to cry, but the
    tears wouldn't come

    Сообщений: 2712
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: Повторная передача параметра по умолчанию
    Ответ #63 - 26. Июня 2006 :: 17:28
    Печать  
    sedmin писал(а) 26. Июня 2006 :: 17:23:
    Лажа да и только. Уж лучше отключить проверку типов.

    Именно.

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

    Ты определись: тебе типизацию, или ехать?
      
    Наверх
    www  
    IP записан
     
    sedmin
    1c++ developer
    Отсутствует


    I Hate Fat YaBB 2!

    Сообщений: 862
    Зарегистрирован: 24. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #64 - 26. Июня 2006 :: 17:28
    Печать  
    fez писал(а) 26. Июня 2006 :: 17:18:
    Я еще раз спрашиваю: Зачем нужно использовать проверку типов в насквозь нетипизированном языке?


    Честно? Хотел использовать ее в подмножестве языка для дополнительного вылавливания ошибок.

    Нахрена тогда ее вообще сделали? Типы только мешаются при описании параметров.

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

    Сейчас у нас это основной сдерживающий момент для переноса кода в классы. Пару раз я ткнулся  - не пошло, надо переписывать. Теперь для классов используется только новый код.
      
    Наверх
     
    IP записан
     
    sedmin
    1c++ developer
    Отсутствует


    I Hate Fat YaBB 2!

    Сообщений: 862
    Зарегистрирован: 24. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #65 - 26. Июня 2006 :: 17:37
    Печать  
    fez писал(а) 26. Июня 2006 :: 17:28:
    Или у нас строгая типизация, но тогда нужно переколбашивать вообще всё.


    Не надо. Единственное - сделать так, что параметр, который я принял, как тип "ПроизвольныйТип", можно было передать дальше как "ПроизвольныйТип".

    Ну почему, если 1С++ пропущенный параметр для меня заменяет на <Пустое значение неопределенного типа>, то он не дает это значение дальше передать в эту же или в другую процедуру с пропущенным параметром?

    Если я попросил СписокЗначений, а пришел NIL, то почему я не могу передать его в метод, который принимает (СписокЗначений либо NIL)?

    Опять никто мне не объясняет, чем плох мой код... Все говорят "Зачем тебе это нужно? Иди в обход."
      
    Наверх
     
    IP записан
     
    sedmin
    1c++ developer
    Отсутствует


    I Hate Fat YaBB 2!

    Сообщений: 862
    Зарегистрирован: 24. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #66 - 26. Июня 2006 :: 17:45
    Печать  
    Приведу реальный код, чтобы вам было легче меня критиковать.

    Код
    Выбрать все
    Класс МойДокумент=МойДокумент.txt{
      void Новый(СписокЗначений спШапка="", ТаблицаЗначений тзТабличнаяЧасть="");
      void ЗаполнитьШапку(СписокЗначений спШапка="");
    }
    
    Процедура Новый(спШапка, тзТабличнаяЧасть)
      База().Новый();
      ПриСозданииДокументов(База("Документ")); //Совместимость со старым кодом - сразу все не переделаешь.
      Сам.ЗаполнитьШапку(спШапка);
    КонецПроцедуры
     
    
    


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

    Следовательно, такое использование надо разрешить.
      
    Наверх
     
    IP записан
     
    fez
    Forum Administrator
    1c++ power user
    Отсутствует


    I wanted to cry, but the
    tears wouldn't come

    Сообщений: 2712
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: Повторная передача параметра по умолчанию
    Ответ #67 - 26. Июня 2006 :: 17:51
    Печать  
    sedmin писал(а) 26. Июня 2006 :: 17:37:
    Если я попросил СписокЗначений, а пришел NIL, то почему я не могу передать его в метод, который принимает (СписокЗначений либо NIL)?

    Потому что у тебя нет языковых средств сказать, что метод принимает два типа параметров.

    Цитата:
    Опять никто мне не объясняет, чем плох мой код.

    У тебя хороший код. Просто это не 1С, и не 1С++. И именно это я и пытаюсь до тебя донести.
      
    Наверх
    www  
    IP записан
     
    fez
    Forum Administrator
    1c++ power user
    Отсутствует


    I wanted to cry, but the
    tears wouldn't come

    Сообщений: 2712
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: Повторная передача параметра по умолчанию
    Ответ #68 - 26. Июня 2006 :: 17:55
    Печать  
    sedmin писал(а) 26. Июня 2006 :: 17:45:
    Приведу реальный код, чтобы вам было легче меня критиковать.

    Услышь меня.

    СписокЗначений спШапка=""

    Тут ты пытаешься усидеть на двух стульях сразу. Первый стул - это 1С-кое отсутствие строгой типизации. Второй стул - это 1С++-ная проверка типов. Ты определись для начала: ты хочешь использовать строгую типизацию или нет?
      
    Наверх
    www  
    IP записан
     
    sedmin
    1c++ developer
    Отсутствует


    I Hate Fat YaBB 2!

    Сообщений: 862
    Зарегистрирован: 24. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #69 - 26. Июня 2006 :: 17:56
    Печать  
    fez писал(а) 26. Июня 2006 :: 17:51:
    Потому что у тебя нет языковых средств сказать, что метод принимает два типа параметров.

    Как нет? Если написать Метод(СписокЗначений Список="");, то это означает, что мой код должен уметь обрабатывать два типа параметров. Я же не смогу без дополнительной проверки написать в коде

    Для ъ=1 По Список.РазмерСписка() Цикл

    От этого никуда не деться. Надо только сделать еще один шаг и разрешить передать этот параметр дальше. Услышь меня.  Улыбка
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


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

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #70 - 26. Июня 2006 :: 18:01
    Печать  
    Ну а если сделать прохождение проверки NIL в классе опциональным?

    Единственно, это надо делать опять же модификатором типа.
    Типа того:

    Цитата:
    void ЗаполнитьШапку(__ALLOW__NIL__ СписокЗначений спШапка="");

      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    fez
    Forum Administrator
    1c++ power user
    Отсутствует


    I wanted to cry, but the
    tears wouldn't come

    Сообщений: 2712
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: Повторная передача параметра по умолчанию
    Ответ #71 - 26. Июня 2006 :: 18:02
    Печать  
    sedmin писал(а) 26. Июня 2006 :: 17:45:
    Ну зачем мне, если у меня уже есть метод ЗаполнитьШапку(), как-то извращаться и что-то делать с спШапка? Ну не логично же это. Любые действия с спШапка тут будут лишними.

    Если ты в первую очередь не хочешь лишних действий со спШапка (в этом вопросе я тебя понимаю и поддерживаю), то у тебя есть уже готовый способ сделать это. Даже два.
    1. Создать в глобальнике функцию глПустойСписок(), и в спШапка передавать его.
    2. Не использовать проверку типов.

    ЗАЧЕМ выдумывать что-то еще? Ради удовольствия написать =""?
      
    Наверх
    www  
    IP записан
     
    fez
    Forum Administrator
    1c++ power user
    Отсутствует


    I wanted to cry, but the
    tears wouldn't come

    Сообщений: 2712
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: Повторная передача параметра по умолчанию
    Ответ #72 - 26. Июня 2006 :: 18:05
    Печать  
    sedmin писал(а) 26. Июня 2006 :: 17:56:
    fez писал(а) 26. Июня 2006 :: 17:51:
    Потому что у тебя нет языковых средств сказать, что метод принимает два типа параметров.

    Как нет? Если написать Метод(СписокЗначений Список="");, то это означает, что мой код должен уметь обрабатывать два типа параметров.

    Типизация или есть или ее нет. Два типа параметров - это отсутствие типизации.
      
    Наверх
    www  
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


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

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #73 - 26. Июня 2006 :: 18:07
    Печать  
    fez писал(а) 26. Июня 2006 :: 18:05:
    sedmin писал(а) 26. Июня 2006 :: 17:56:
    fez писал(а) 26. Июня 2006 :: 17:51:
    Потому что у тебя нет языковых средств сказать, что метод принимает два типа параметров.

    Как нет? Если написать Метод(СписокЗначений Список="");, то это означает, что мой код должен уметь обрабатывать два типа параметров.

    Типизация или есть или ее нет. Два типа параметров - это отсутствие типизации.

    Федор, не совсем так.
    Вот возьмем С/ C++.
    Код
    Выбрать все
    void somefunc(int * pi)
    {
    }
    
    int i = 100;
    somefunc(&i); // корректно
    somefunc(NULL); // тоже корректно
     
    
    
      

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


    I Hate Fat YaBB 2!

    Сообщений: 862
    Зарегистрирован: 24. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #74 - 26. Июня 2006 :: 18:09
    Печать  
    Ну наконец-то. Хоть одного на свою сторону переманил.  Улыбка
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


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

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #75 - 26. Июня 2006 :: 18:09
    Печать  
    kms писал(а) 26. Июня 2006 :: 18:01:
    Ну а если сделать прохождение проверки NIL в классе опциональным?

    Единственно, это надо делать опять же модификатором типа.
    Типа того:

    Цитата:
    void ЗаполнитьШапку(__ALLOW__NIL__ СписокЗначений спШапка="");



    Добавлю, что модификатор __ALLOW__NIL__ и инициализатор ="" не равнозначны.
    Первый указывает на возможность NIL на прохождение проверки типов, а второй - инициализирует значение переменной, не обязательно нилом.
      

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


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

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #76 - 26. Июня 2006 :: 18:10
    Печать  
    sedmin писал(а) 26. Июня 2006 :: 18:09:
    Ну наконец-то. Хоть одного на свою сторону переманил.  Улыбка

    Да просто надоел ты со своим нилом  Смех
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    fez
    Forum Administrator
    1c++ power user
    Отсутствует


    I wanted to cry, but the
    tears wouldn't come

    Сообщений: 2712
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: Повторная передача параметра по умолчанию
    Ответ #77 - 26. Июня 2006 :: 18:10
    Печать  
    sedmin писал(а) 26. Июня 2006 :: 17:56:
    Надо только сделать еще один шаг и разрешить передать этот параметр дальше. Услышь меня.  Улыбка

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

    Тогда и Палыч будет доволен и начнет пользоваться типизацией. Да, Палыч? Подмигивание
      
    Наверх
    www  
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


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

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

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

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

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

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

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


    I Hate Fat YaBB 2!

    Сообщений: 862
    Зарегистрирован: 24. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #79 - 26. Июня 2006 :: 18:13
    Печать  
    Потому что NIL - это не тип. Это особенный тип.

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


    I Hate Fat YaBB 2!

    Сообщений: 862
    Зарегистрирован: 24. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #80 - 26. Июня 2006 :: 18:15
    Печать  
    kms писал(а) 26. Июня 2006 :: 18:12:
    А, кстати, я правильно Палыча понимаю, что его не устраивает проверка типов для наследников, если в типизации параметра указать базовый класс?


    Ну это же не проблема для настоящих индейцев. Ведь так, kms?
      
    Наверх
     
    IP записан
     
    fez
    Forum Administrator
    1c++ power user
    Отсутствует


    I wanted to cry, but the
    tears wouldn't come

    Сообщений: 2712
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: Повторная передача параметра по умолчанию
    Ответ #81 - 26. Июня 2006 :: 18:18
    Печать  
    kms писал(а) 26. Июня 2006 :: 18:07:
    Вот возьмем C++.

    Мы как-то уже выясняли (на примере с "полиморфизмом"), что сравнивать 1С++ и С++ - некорректно. 1С++ ближе к питону. В питоне кстати тоже типизации нет. Вообще. И Null'а нету.

    Понятно, что для языка типа С++ со строгой типизацией - NULL жизненно необходим.
    А вот зачем вам нужна типизация в 1С - я так и не услышал.
      
    Наверх
    www  
    IP записан
     
    fez
    Forum Administrator
    1c++ power user
    Отсутствует


    I wanted to cry, but the
    tears wouldn't come

    Сообщений: 2712
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: Повторная передача параметра по умолчанию
    Ответ #82 - 26. Июня 2006 :: 18:20
    Печать  
    sedmin писал(а) 26. Июня 2006 :: 18:13:
    И переменной я здесь пользоваться не хочу. Так как в этом случае обязательно найдется придурок, который использует ее не там, где надо, и она чем-нибудь заполнится.

    Воспользуйся функцией.
      
    Наверх
    www  
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


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

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #83 - 26. Июня 2006 :: 18:20
    Печать  
    Дядьки, вопрос на засыпку

    объявление:
    Код
    Выбрать все
    void _ТестПарам2(Неопределенный парам="СписокЗначений");
     
    
    

    Чем парам будет инициализирован?
      

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


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

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #84 - 26. Июня 2006 :: 18:27
    Печать  
    sedmin писал(а) 26. Июня 2006 :: 18:15:
    kms писал(а) 26. Июня 2006 :: 18:12:
    А, кстати, я правильно Палыча понимаю, что его не устраивает проверка типов для наследников, если в типизации параметра указать базовый класс?


    Ну это же не проблема для настоящих индейцев. Ведь так, kms?

    Не знаю еще. Вроде не проблема.
    А ты как предлагаешь решать? Передавать в класс значение базового класса или пропускать наследников при проверке типов?
      

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


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

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #85 - 26. Июня 2006 :: 18:47
    Печать  
    sedmin писал(а) 26. Июня 2006 :: 17:45:
    Приведу реальный код, чтобы вам было легче меня критиковать.

    Код
    Выбрать все
    Класс МойДокумент=МойДокумент.txt{
      void Новый(СписокЗначений спШапка="", ТаблицаЗначений тзТабличнаяЧасть="");
      void ЗаполнитьШапку(СписокЗначений спШапка="");
    }
    
    Процедура Новый(спШапка, тзТабличнаяЧасть)
      База().Новый();
      ПриСозданииДокументов(База("Документ")); //Совместимость со старым кодом - сразу все не переделаешь.
      Сам.ЗаполнитьШапку(спШапка);
    КонецПроцедуры
     
    
    


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

    Следовательно, такое использование надо разрешить.


    Короче, делай так:
    Код
    Выбрать все
    void Новый(СписокЗначений спШапка="СписокЗначений", ТаблицаЗначений тзТабличнаяЧасть="ТаблицаЗначений");
     
    
    

    Побольше отдыхай, а в освободившееся время читай документацию.
    Пожалуйста, вслух, всем же интересно Улыбка


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

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


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

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #86 - 26. Июня 2006 :: 19:03
    Печать  
    kms писал(а) 26. Июня 2006 :: 18:27:
    sedmin писал(а) 26. Июня 2006 :: 18:15:
    kms писал(а) 26. Июня 2006 :: 18:12:
    А, кстати, я правильно Палыча понимаю, что его не устраивает проверка типов для наследников, если в типизации параметра указать базовый класс?


    Ну это же не проблема для настоящих индейцев. Ведь так, kms?

    Не знаю еще. Вроде не проблема.
    А ты как предлагаешь решать? Передавать в класс значение базового класса или пропускать наследников при проверке типов?

    Сейчас проверил - нет проблем с передачей наследников в качестве параметров типа базового класса.
    Тогда о чем говорил Палыч?
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    fez
    Forum Administrator
    1c++ power user
    Отсутствует


    I wanted to cry, but the
    tears wouldn't come

    Сообщений: 2712
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: Повторная передача параметра по умолчанию
    Ответ #87 - 26. Июня 2006 :: 19:27
    Печать  
    kms писал(а) 26. Июня 2006 :: 18:47:
    Короче, делай так:
    Код
    Выбрать все
    void Новый(СписокЗначений спШапка="СписокЗначений", ТаблицаЗначений тзТабличнаяЧасть="ТаблицаЗначений");
     
    
    

    Побольше отдыхай, а в освободившееся время читай документацию.


    Ээээ, а можно для лишенцев рассказать, где такое в документации написано?
    Я, кажется, начинаю понимать, почему пустая строка передается как пустое значение без типа...
      
    Наверх
    www  
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


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

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #88 - 26. Июня 2006 :: 19:38
    Печать  
    Для всех нас братьев пилотов соседнюю тему завел: http://www.1cpp.ru/forum/YaBB.pl?num=1151346979
      

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


    I Hate Fat YaBB 2!

    Сообщений: 862
    Зарегистрирован: 24. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #89 - 27. Июня 2006 :: 04:50
    Печать  
    Согласен, найденная фича позволяет решить проблему, и, кроме того, адепты чистоты языка будут довольны найденным решением.

    Но для удобства пользования мне хотелось бы иметь просто признак пропущенного параметра. И хотелось бы иметь возможность передать этот признак дальше по цепочке без потери возможности контроля типов.
      
    Наверх
     
    IP записан
     
    Палыч
    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 записан
     
    sedmin
    1c++ developer
    Отсутствует


    I Hate Fat YaBB 2!

    Сообщений: 862
    Зарегистрирован: 24. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #105 - 28. Июня 2006 :: 18:54
    Печать  
    Deb писал(а) 28. Июня 2006 :: 11:14:
    Не понимаю в чем проблема, почему нельзя делать так:
    void Метод1_СПараметромПоУмолчанию(СписокЗначений Список=СоздатьОбъект("СписокЗначений"));

    И типизацией все в порядке и по умолчанию объетк создается и вызывать снова можешь этот же метод, передавая туда этот же параметр.  Ужас


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

    Если интересто - просмотри мои посты, pls.

    PS. Кстати, мы нашли даже более простое решение, если верить документации:
    void Метод1_СПараметромПоУмолчанию(СписокЗначений Список="СписокЗначений");  Очень довольный
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


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

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #106 - 28. Июня 2006 :: 19:29
    Печать  
    sedmin писал(а) 28. Июня 2006 :: 18:54:
    Deb писал(а) 28. Июня 2006 :: 11:14:
    Не понимаю в чем проблема, почему нельзя делать так:
    void Метод1_СПараметромПоУмолчанию(СписокЗначений Список=СоздатьОбъект("СписокЗначений"));
    Ужас

    PS. Кстати, мы нашли даже более простое решение, если верить документации:
    void Метод1_СПараметромПоУмолчанию(СписокЗначений Список="СписокЗначений");  Очень довольный

    Угу, я как раз хотел по-дружески спросить:
    - Deb, ладно мы, но ты сам-то свою документацию читал? Смех
      

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


    Sex, drugs and 1C

    Сообщений: 41
    Зарегистрирован: 21. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #107 - 29. Июня 2006 :: 08:00
    Печать  
    kms писал(а) 28. Июня 2006 :: 19:29:
    sedmin писал(а) 28. Июня 2006 :: 18:54:
    Deb писал(а) 28. Июня 2006 :: 11:14:
    Не понимаю в чем проблема, почему нельзя делать так:
    void Метод1_СПараметромПоУмолчанию(СписокЗначений Список=СоздатьОбъект("СписокЗначений"));
    Ужас

    PS. Кстати, мы нашли даже более простое решение, если верить документации:
    void Метод1_СПараметромПоУмолчанию(СписокЗначений Список="СписокЗначений");  Очень довольный

    Угу, я как раз хотел по-дружески спросить:
    - Deb, ладно мы, но ты сам-то свою документацию читал? Смех

    Я ее писал, но давно... Улыбка
      
    Наверх
     
    IP записан
     
    Deb
    1c++ developer
    Отсутствует


    Sex, drugs and 1C

    Сообщений: 41
    Зарегистрирован: 21. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #108 - 29. Июня 2006 :: 08:11
    Печать  
    sedmin писал(а) 28. Июня 2006 :: 18:54:
    Deb писал(а) 28. Июня 2006 :: 11:14:
    Не понимаю в чем проблема, почему нельзя делать так:
    void Метод1_СПараметромПоУмолчанию(СписокЗначений Список=СоздатьОбъект("СписокЗначений"));

    И типизацией все в порядке и по умолчанию объетк создается и вызывать снова можешь этот же метод, передавая туда этот же параметр.  Ужас


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

    Если интересто - просмотри мои посты, pls.

    PS. Кстати, мы нашли даже более простое решение, если верить документации:
    void Метод1_СПараметромПоУмолчанию(СписокЗначений Список="СписокЗначений");  Очень довольный


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

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

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


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

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #109 - 29. Июня 2006 :: 09:01
    Печать  
    Deb писал(а) 29. Июня 2006 :: 08:00:
    Я ее писал, но давно... Улыбка

    Дмитрий, а вот этот момент в доке не расшифруешь?

    Цитата:
    Кроме того, акцентирую вот этот момент:

    Цитата:
    Внимание: при указании в качестве значения по умолчанию “” – тип значения не учитывается.

    Что имел в виду Deb? Где не учитывается? В проверке типов? Сейчас это не выполняется.
    Баг? Или неточная формулировка?

    Здесь что имел в виду?
      

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


    Sex, drugs and 1C

    Сообщений: 41
    Зарегистрирован: 21. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #110 - 29. Июня 2006 :: 10:03
    Печать  
    kms писал(а) 29. Июня 2006 :: 09:01:
    Deb писал(а) 29. Июня 2006 :: 08:00:
    Я ее писал, но давно... Улыбка

    Дмитрий, а вот этот момент в доке не расшифруешь?

    Цитата:
    Кроме того, акцентирую вот этот момент:

    Цитата:
    Внимание: при указании в качестве значения по умолчанию “” – тип значения не учитывается.

    Что имел в виду Deb? Где не учитывается? В проверке типов? Сейчас это не выполняется.
    Баг? Или неточная формулировка?

    Здесь что имел в виду?


    Сложно сказать... Думаю что имелось ввиду, отсутствие проверки типа при отсутствии фактического параметра...
      
    Наверх
     
    IP записан
     
    Deb
    1c++ developer
    Отсутствует


    Sex, drugs and 1C

    Сообщений: 41
    Зарегистрирован: 21. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #111 - 29. Июня 2006 :: 10:07
    Печать  
    Сейчас проверил, именно это и имелось ввиду. Бага нет, по крайней мере на релизе 1.8.1.6.
      
    Наверх
     
    IP записан
     
    sedmin
    1c++ developer
    Отсутствует


    I Hate Fat YaBB 2!

    Сообщений: 862
    Зарегистрирован: 24. Мая 2006
    Re: Повторная передача параметра по умолчанию
    Ответ #112 - 29. Июня 2006 :: 19:59
    Печать  
    Deb писал(а) 29. Июня 2006 :: 08:11:
    Я просто не могу понять, чем записть void Метод1_СПараметромПоУмолчанию(СписокЗначений Список="");
    типо здесь, как я понял будет создаваться тот же объект "СписокЗначений"

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


    Лучше записать в предлагаемой "новой" нотации:

    void Метод1_СПараметромПоУмолчанию(СписокЗначений Список=%%);

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

    Этим маркером и выступает Null. Но проблема заключается в том, что этот маркер нельзя передать дальше транзитом - если параметр не пропущен, то производится проверка типов, и возникает ошибка.

    Цитата:
    Думаю что имелось ввиду, отсутствие проверки типа при отсутствии фактического параметра...


    И вот это тоже зря - описано, что параметр будет одного типа, а на самом деле - другого. И опять транзитом его не передашь.

    Предлагаю: для параметров по умолчанию сделать обычную проверку типов, но сделать исключение для Null, как для признака пропущенного параметра.
      
    Наверх
     
    IP записан
     
    Переключение на Главную Страницу Страницы: [1] 
    ОтправитьПечать