Переключение на Главную Страницу Страницы: 1 2 [3] 4 5 ... 8 ОтправитьПечать
Очень популярная тема (более 25 ответов) Повторная передача параметра по умолчанию (число прочтений - 45620 )
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 записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 5 ... 8
ОтправитьПечать