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