Вход | Регистрация
    1  2  3   
Информационные технологии :: Математика и алгоритмы

Блочный оператор в одну строку

Блочный оператор в одну строку
Я
   trad
 
15.07.20 - 12:21
2. Вариант Б78% (43)
1. Вариант А22% (12)
Всего мнений: 55

Как вы пишете блочные операторы Если, Пока, Для, Попытка и т.п. если в теле всего один исполняемый оператора?

Вариант А:
Если А=Б Тогда Возврат; КонецЕсли;

Вариант Б:
Если А=Б Тогда
    Возврат;
КонецЕсли;
   Шоколадная страсть
 
101 - 16.07.20 - 07:30
(98) Не упоротые, а нормальные. Конечно улучшают.
(99) На то оно и лучшее, что все будут довольны.
   acht
 
102 - 16.07.20 - 08:44
(96) Есть люди, которые заводят новые ники с надеждой "вот, вот, сейчас я всех затроллю, создам себе образ". И снова и снова вместо образа тролля у них получается образ клоуна.
   vi0
 
103 - 16.07.20 - 08:45
(96) гордиться можно тем, что все внедрилось хорошо, код хорошо масштабируется и поддерживается
а то что там нет переменных и головоломки от этого, то это та самая упоротость, не имеющая отношения к качеству
   fisher
 
104 - 16.07.20 - 09:12
Одностроки - это что-то родом из детства. Когда перло от того, сколько логики можно засунуть в одну строку. Это ж круто. Сишные циклы с максимумом логики в объявлении цикла - наше все.
Но в программировании бизнес-логики чем больше от нее устаешь, тем больше раздражает "оригинальность" и "самодеятельность". Основное требование к бизнес-логике - читабельность и удобство поддержки и модификации. Все остальное - вторично. Ну, без грубых ляпов по производительности, ессно. 1С давно уже пора прикрутить намертво автоматические линтеры и форматтеры, которые насильно засовывают в гайд-стайлы.
   AlexTim03
 
105 - 16.07.20 - 09:36
Рекомендации языка 1с

2. Вариант Б
   AlexTim03
 
106 - 16.07.20 - 09:37
Описано в ИТС
   hi1C
 
107 - 16.07.20 - 09:38
(76) я тоже так делаю, как тут лайки ставить :)
   Джинн
 
108 - 16.07.20 - 09:38
Быдлокодеров на кол!

2. Вариант Б
   fisher
 
109 - 16.07.20 - 09:41
(107) И как ты оформляешь десять последовательных проверок входных данных? "Лесенкой"?
   pavig
 
110 - 16.07.20 - 10:02
(0)
Только Б

2. Вариант Б
   Sserj
 
111 - 16.07.20 - 10:02
(76) Вообще "количество точек выхода из функции" это все таки рекомендация а не железобетонное правило.
Все зависит от ситуации, если функция огромная и зависит от правильности входных параметров, то лично я предпочту как минимум 2 точки выхода, чем
листать лапшу кода, да еще со скачками по стекам вызова:

Функция а(п1, п2, п3, ... пN)
  результат = Неопределено; // это всегда первый оператор
  Если НЕ КонтрольВходныхПараметров(п1, п2, п3, ... пN) Тогда
    Возврат результат;
  КонецЕсли;
...
...
  Возврат Результат; // это всегда последний оператор и единственный возврат во всей функции
КонецФункции
   Полован
 
112 - 16.07.20 - 10:06
(111) А не надо делать огромные функции. Проверку входных параметров, если их много или она сложная, так вообще лучше делать до вызова функции. Ну, или в отдельной функции.
   pavig
 
113 - 16.07.20 - 10:06
(76)
Поддерживаю.

Но для простых функций делаю проще, чтобы кода было меньше:
Если <условие> Тогда
    Возврат 1;
Иначе
    Возврат 2;
КонецЕсли;
   Sserj
 
114 - 16.07.20 - 10:11
(112) Совсем опыта нет? :)
Это подойдет только в тривиальных функциях из учебников. В реальности функции делаются для частого использования и придется в десятках точек вызова не забывать проверять параметры, ну или вызывать еще одну функцию.
   Полован
 
115 - 16.07.20 - 10:14
(114) :)) Ну да, конечно.
   hi1C
 
116 - 16.07.20 - 10:14
(114) в (112) правильно написано, функции и процедуры применяются не только для выделения повторяющегося кода, попробуйте тест написать для своей мегафункции и всё встанет на свои места
   Sserj
 
117 - 16.07.20 - 10:21
(116) И что должно встать на свои места?
Каждый день каждый использует эти мегафункции, простой пример: ОбработкаПроведения любого документа. Или по твоему это не таже самая простая функция без возврата значения?
   hi1C
 
118 - 16.07.20 - 10:27
(117) мозги встанут на свои места, если есть

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

хотя зачем я это тебе объясняю, оставайся быдлокодером, так спокойней
   fisher
 
119 - 16.07.20 - 10:34
(113) Если можно написать без "Иначе" - лучше писать без "Иначе". Читается легче, рефакторить легче, меньше шансов ошибиться.
   fisher
 
120 - 16.07.20 - 10:39
(116) Не очень понял, каким образом тестирование отменяет проверку входных параметров.
   Sserj
 
121 - 16.07.20 - 10:42
(118) Тяжело тебе малыш настоящему Дартарьяну, вокруг сплошное быдло :)
   fisher
 
122 - 16.07.20 - 10:43
Если речь про юнит-тесты, то они в т.ч. как раз и должны проверить, что функция ведет себя устойчиво и ожидаемо при любых краевых условиях.
   1c_2189
 
123 - 16.07.20 - 10:43
Б и только Б. Бесит когда в одну строчку. Что этим показывают? Свою "крутизну"?  Чушь все это.

2. Вариант Б
   Megas
 
124 - 16.07.20 - 10:48
Так отлаживаться проще и глазами видеть.

Если А=Б Тогда Возврат А; иначе Возврат Б; КонецЕсли;   - Пипец неудобно

2. Вариант Б
   hi1C
 
125 - 16.07.20 - 10:49
(120) я тоже не понимаю каким образом тестирование отменяет проверку входных параметров :) я про это ничего не писал
   Ц_У
 
126 - 16.07.20 - 10:50
Отказ = ?(ВсеПлохо,Истина,Ложь)
   fisher
 
127 - 16.07.20 - 10:51
(125) Тогда я не понял, за что ты топишь. За ранний выход при проверке входных параметров, или за вложенные "Если" чтобы обеспечить единую точку выхода из функции.
   Полован
 
128 - 16.07.20 - 10:52
(126) Некоторые считают, что использование тернарных операторов такой-же дурной тон, как goto :)
   hi1C
 
129 - 16.07.20 - 10:54
(127) за уменьшение размеров функций, чтобы функция размещалась на одном экране, тогда будет не важно сколько возвратов в функции
   DionisSergeevich
 
130 - 16.07.20 - 10:55
Ну зачем же так фанатично. Нужна поверка - ну сделай вначале функции и точку выхода. Пусть будет две - в начале и в конце. Зло это в середине несколько выходов
 
 Рекламное место пустует
   fisher
 
131 - 16.07.20 - 10:56
(129) Достойная цель. Но не любой же ценой. Дроблением логики - да. Игрой синтаксисом - ересь.
   D_E_S_131
 
132 - 16.07.20 - 11:02
Пишу "Если", <space>, <выбор варианта>, <написание условия>.
И всегда получается ...

2. Вариант Б
   lucbak
 
133 - 16.07.20 - 11:04
Откуда вообще взялся вариант Б ?!

1. Вариант А
   1c_2189
 
134 - 16.07.20 - 11:05
(133) в нормальных вузах так учат)
   Sserj
 
135 - 16.07.20 - 11:17
(129) хи-хи.
Вот смотри: УТ 11.4 ОбработкаПроведения РеализацииТоваровИУслуг (центровой документ для УТ однако):

ЗаказыСервер.ОтразитьЗаказыКлиентов(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьСвободныеОстатки(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьОбеспечениеЗаказов(ДополнительныеСвойства, Движения, Отказ);
ЗаказыСервер.ОтразитьТоварыКОтгрузке(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьТоварыНаСкладах(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьТоварыОрганизаций(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьТоварыОрганизацийКПередаче(ДополнительныеСвойства, Движения, Отказ);
Если ДополнительныеСвойства.Свойство("ЗаписыватьРезервыТоваровОрганизацийВместеСоВсеми")
    И ДополнительныеСвойства.ЗаписыватьРезервыТоваровОрганизацийВместеСоВсеми Тогда
    ЗапасыСервер.ОтразитьРезервыТоваровОрганизаций(ДополнительныеСвойства, Движения, Отказ);
КонецЕсли;
ЗапасыСервер.ОтразитьТоварыПереданныеНаКомиссию(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьУслугиКОформлениюОтчетовПринципалу(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьДатыПередачиТоваровНаКомиссию(ДополнительныеСвойства, Отказ);
ЗапасыСервер.ОтразитьТоварыКОформлениюОтчетовКомитента(ДополнительныеСвойства, Движения, Отказ);
ЗапасыСервер.ОтразитьОбеспечениеЗаказовРаботами(ДополнительныеСвойства, Движения, Отказ);
ДоходыИРасходыСервер.ОтразитьСебестоимостьТоваров(ДополнительныеСвойства, Движения, Отказ);
ДоходыИРасходыСервер.ОтразитьВыручкуИСебестоимостьПродаж(ДополнительныеСвойства, Движения, Отказ);
ВзаиморасчетыСервер.ОтразитьРасчетыСКлиентами(ДополнительныеСвойства, Движения, Отказ);
МногооборотнаяТараСервер.ОтразитьПереданнуюВозвратнуюТару(ДополнительныеСвойства, Движения, Отказ);    
СкладыСервер.ОтразитьДвиженияСерийТоваров(ДополнительныеСвойства, Движения, Отказ);
ВзаиморасчетыСервер.ОтразитьСуммыДокументаВВалютеРегл(ДополнительныеСвойства, Движения, Отказ);
ЗатратыСервер.ОтразитьМатериалыИРаботыВПроизводстве(ДополнительныеСвойства, Движения, Отказ);    
УчетНДСУП.СформироватьДвиженияВРегистры(ДополнительныеСвойства, Движения, Отказ);

Напомню, это обработка проведения, выполняется в транзакции. В каждой, В КАЖДОЙ из этих процедур первые 3 строки:

Таблица = ..как то получить таблицу.    
Если Отказ ИЛИ Таблица.Количество() = 0 Тогда
Возврат;
КонецЕсли;

(Ой а тебе же не нравится проверка входного параметра в начале процедуры, ну передавай привет разработчикам типовых :) )

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

Если Отказ Тогда
  Возврат;
КонецЕсли;
   hi1C
 
136 - 16.07.20 - 11:22
(135) подгорает? где я писал что мне не нравится проверка входного параметра?
   Sserj
 
137 - 16.07.20 - 11:31
(136) Я думаю головой, поэтому меня что-то "раздражает", ну то чем изволишь думать ты, что это что-то "подгорает" пусть у тебя расслабится :)
Так вот меня раздражает когда теоретики увидят учебный тривиальный пример и возводят его в догму. Посмотрят видосики создания функций возведеня в квадрат или даже вдруг станут гуру посмотрев пример рекурсии и начинают бросать постулаты.
Какая функция на один экран, если более-менее не тривиальный запрос только страниц на 5-10 строится.
   hi1C
 
138 - 16.07.20 - 11:36
(137) раздражает так сходи водички попей, всем как бы пофиг отчего у тебя подгорает

приведенный пример не ок но лучше чем если бы всё это было в одной функции
   Полован
 
139 - 16.07.20 - 11:59
(137) Запрос сворачивается до одной строки, если что :))
   Галахад
 
140 - 16.07.20 - 12:00
Шаблоны же. Поэтому однотипно.

2. Вариант Б
   vi0
 
141 - 16.07.20 - 12:39
(139) да и вся функция тоже, при желании
   Конструктор1С
 
142 - 16.07.20 - 12:51
(74) большой стек вызовов, если декомпозиция методов выполнена правильно, имена методов лаконичные, делает код очень гибким и самодокументирующимся. А большая вложенность условных операторов делает код тяжелым для восприятия и изменения, увеличивает количество трудновыявляемых ошибок. Собственно, один из самых эффективных способов рефакторинга это "извлечение метода" - когда часть метода выделяется в отдельный метод
   Конструктор1С
 
143 - 16.07.20 - 12:57
(76) такой подход приводит к усложнению логических конструкций внутри функции и опасности возврата неверно инициализированного значения
   hi1C
 
144 - 16.07.20 - 13:06
(141) точно, а тут "если тогда" предлагают в три строки писать :)
   vi0
 
145 - 16.07.20 - 13:09
(142) я вот тоже не понимаю недовольства насчет большого стека
если конечно это не параноидально сделано, когда по одной строке в каждой функции
   Конструктор1С
 
146 - 16.07.20 - 13:12
(93) оператор ?() тоже зло, усложняющее восприятие кода и отладку. Никто его не переделывает в нормальное Если...Тогда, даже автор кода. Он непременно загниёт в уродливую длинную конструкцию с вложенными ?()
   Конструктор1С
 
147 - 16.07.20 - 13:19
(114) не придётся, если декомпозиция кода выполнена по-человечески
   Casey1984
 
148 - 16.07.20 - 15:48
(8)

2. Вариант Б
   Шоколадная страсть
 
149 - 16.07.20 - 16:29
(103) Тем и горжусь, что код хорошо поддерживается и масштабируется, и все хорошо внедрилось, юзеры довольны.
А то что нет переменных и условий - это всего лишь причина хорошего результата.
   vi0
 
150 - 16.07.20 - 17:49
(149) не только лишь все
   AliceLight
 
151 - 16.07.20 - 17:57
(100) полностью поддерживаю и использую вариант Б из тех же соображений.

Люблю, когда в типовом коде несколько условий разнесены на разные строчки, т.е. не
"Если ПеременнаяСТипичноДлиннющимНазванием1 = 0 И ПеременнаяСДлиннющимНазванием1 <> ПеременнаяСДлиннющимНазванием2 Тогда", а
"Если ПеременнаяСТипичноДлиннющимНазванием1 = 0
    И ПеременнаяСДлиннющимНазванием1 <> ПеременнаяСДлиннющимНазванием2 Тогда"

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

2. Вариант Б
   Шоколадная страсть
 
152 - 16.07.20 - 18:19
(151) Это же разные вещи. Вариант А хорош для простых и коротких условий и операций, а вариант Б лучше для длинных.
   vi0
 
153 - 16.07.20 - 18:28
(151) согласен, логика одна - повысить читабельность не в ущерб ничему
   Eiffil123
 
154 - 16.07.20 - 18:35
я аж бешусь, кто выбрал вариант А

2. Вариант Б
   Eiffil123
 
155 - 16.07.20 - 18:39
(135)
>> Так ты и правда уверен что первой строкой в ОбработкаПроведения вот такой вещи это быдлячество:
>> Если Отказ Тогда
>>   Возврат;
>> КонецЕсли;

А как может первой строкой в обработку проведения прийти сразу отказ?
То, что в перечисленных вызываемых процедурах проверяется на Отказ - это нормально для ускорения. Если где-то в предыдущей процедуре выставили флаг, то можно ускориться и не выполнять код процедур.
   obs191
 
156 - 16.07.20 - 18:43
(152)+
   Djelf
 
157 - 16.07.20 - 19:01
(0) А где вариант: Я всегда пишу все процедуры и функции в одну строку?
Это еще компактнее и нагляднее.
   bolder
 
158 - 16.07.20 - 19:28
(0) Потому что просто вставляется из шаблона.Минимум движений.

2. Вариант Б
   novichok79
 
159 - 16.07.20 - 19:32
На разных строках, так больше денег заплатят. А если серьезно, то читается проще и не надо горизонтальный скроллбар надрачивать постоянно. А ещё неприятно, когда переменные типа и, й, к __строка1, ____число10 попадаются. Оторвал бы яи такому гению (у которого в IDE не работает автодополнение), после отладки подобного кода и попыток понять, чем отличается тз1 от тз2.

2. Вариант Б
   vde69
 
160 - 16.07.20 - 19:33
(143) такой подход дает 2 сильных преимущества

1. ты всегда в начале функции видишь какое значение по умолчанию возвращает функция
2. ты всегда можешь поставить точку остановки на последний оператор и гарантировано там будет остановка (и ты сможешь посмотреть результат до выхода из функции, в контексте его получения)
 
 Рекламное место пустует
   bolder
 
161 - 16.07.20 - 19:46
(114) +100500.Тоже удивился предложению проверТь параметры функции до ее вызова)))
   Шоколадная страсть
 
162 - 16.07.20 - 21:09
Забыл проголосовать

1. Вариант А
   Шоколадная страсть
 
163 - 16.07.20 - 21:15
Вообще по современным стандартам:

1. Возврат результата из функции должен быть один.
2. Инициализированные переменные и аргументы функции не переинициализировать.
3. Не использовать операторы ветвлений и переходов.
4. И конечно только чистые функции. Никакого морально устаревшего ООП.

Не всегда кажется это осуществимым, но если подумать, то на самом деле осуществить обычно можно.
Я щас не пропускаю пулл реквесты пока не исправят все эти моменты. И ведь исправляют!
   Shadawn
 
164 - 16.07.20 - 21:30
Функция должна помещаться на экран, иначе думать становится медленнее. Один из вариантов для этого явно более подходящий.

1. Вариант А
   v77
 
165 - 16.07.20 - 21:34
Красивее, понятнее и читабельнее

1. Вариант А
   vde69
 
166 - 16.07.20 - 21:41
(163) а дай ссылочку на "современные стандарты" где это описано
   Шоколадная страсть
 
167 - 16.07.20 - 22:15
(166) Держи: (163)
   Ненавижу 1С
 
168 - 16.07.20 - 22:22
(163) уже п.1 нет:

public static bool Any<TSource> (this System.Collections.Generic.IEnumerable<TSource> source)
{
  foreach(var item in source)
  {
    return true;
  }
  return false;
}
   vde69
 
169 - 16.07.20 - 22:24
(167) пожалуйста аргументируйте, а то похоже на какой-то развод, кто сказал, что ООП морально устарел? Чем чисто функциональный подход дучше процедурного (только про замыкания не втирайте тут).

Давайте конкретику на стандарты или рекомендации серьезных компаний...
   Шоколадная страсть
 
170 - 16.07.20 - 22:27
(168) foreach - плохой оператор.
Лучше так:

public static bool Any<TSource> (this System.Collections.Generic.IEnumerable<TSource> source)
{
    return source.some(item => item);
}
   vde69
 
171 - 16.07.20 - 22:28
(170) так ведь ООП устарел, а ты используешь обьектную модель :)

сам себе противоречишь
   Шоколадная страсть
 
172 - 16.07.20 - 22:29
(169) Если тебе ссылка на мисту не является авторитетной, то вот тебе ссылка на другой сайт в интернете:
https://medium.com/devschacht/glossary-of-modern-javascript-concepts-1198b24e8f56
   Шоколадная страсть
 
173 - 16.07.20 - 22:30
(171) Объект при этом не изменяется. ООП наоборот, подразумевает изменение состояния объекта при выполнении над ним операций.
   vde69
 
174 - 16.07.20 - 22:31
(172) JavaScript - это не язык а фуфел.... даже более ублюдочный чем 1с...
   Шоколадная страсть
 
175 - 16.07.20 - 22:31
(169) Функциональный лучше тем, что замыкания.
   Шоколадная страсть
 
176 - 16.07.20 - 22:31
(174) Ахахах! Шутник блин
   vde69
 
177 - 16.07.20 - 22:32
(173) ООП - это 3 правила, и изменение объекта тут вообще ни причем...
   Ненавижу 1С
 
178 - 16.07.20 - 22:32
(170) ну ты одно заменил другим, тогда расписывай реализацию some
   Ненавижу 1С
 
179 - 16.07.20 - 22:34
Функциональный стиль прекрасен на определенном уровне абстрагирования, но когда приходится спуститься вниз к реальности, то как бы нет...
   Шоколадная страсть
 
180 - 16.07.20 - 22:34
(178) Пример неудачный, так как "some" для того и добавлен в язык, чтобы получалось по красоте.
Придумай другую задачу
   vde69
 
181 - 16.07.20 - 22:37
(176) почему шутник?

ублюдочные языки - это языки которым для работы нужна своя среда исполнения, например: VB, JS, 1c, и еще куча других скриптовых языков.
   Шоколадная страсть
 
182 - 16.07.20 - 22:37
(177) Ладно, про ООП я не правильно написал. Использовать ООП можно, главное не создавать мутабельные объекты как это было принято раньше.
   Ёпрст
 
183 - 16.07.20 - 22:38
(160) и обрастаешь немерянными вложенными условиями и брейкпоинтами, и чтоб потом найти потом, почему результат функции такой, придётся один хрен бегать по всем веткам условий.
На а про проверку параметро на вхлде функции так вообще молчу.
И досрочный выход из функции, гарантирует нужный результат сразу, подход с результатом в конце..сомнительное удовольствие с непредсказуемым результатом.
Ну разве что для маленьких функций в пару строк.
   Шоколадная страсть
 
184 - 16.07.20 - 22:38
(181) В этом нет ничего ублюдочного. Если их можно исполнять в среде, значит и компилятор может существовать под этот язык. Просто не нужно
   Ёпрст
 
185 - 16.07.20 - 22:39
+183 и к 1с-ине..это ну никак не применимо, достаточно посмотреть кд любой типовой или отраслевой, возвраты понапиханы везде...
   Ненавижу 1С
 
186 - 16.07.20 - 22:40
(180) ну вот начинается...

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

а так да, на определенном уровне абстракции мы красиво пишем:

var res = MyCollection.Where(x => x!=0).Select(x => 1.0/x).Sum();
   Шоколадная страсть
 
187 - 16.07.20 - 22:40
(160) >> (и ты сможешь посмотреть результат до выхода из функции, в контексте его получения)

Только вот контекст будет уже изменен, так как переменную мог перезаписать несколько раз.
   Шоколадная страсть
 
188 - 16.07.20 - 22:42
(183) Если получилось много вложений, значит ты неправильно пишешь код. Нужно чтобы было красиво, и один возврат результата в конце
   vde69
 
189 - 16.07.20 - 22:42
(182) мутабельность - это свойсто контекста в привязке к объекту. Ну а Контекст - это свойство среды исполнения... в том-же JS он определен клиентской 32 разрядной частью (очень криво реализованной в плане типов ineger и аналогов а так-же "песочницы"), собственно именно из-за "песочницы"  в JS и есть эта "мутабельность"
   Ёпрст
 
190 - 16.07.20 - 22:43
(188) Сообщите своё мнение на СелезнЁвку, мот прислушаются , а ?
   Шоколадная страсть
 
191 - 16.07.20 - 22:43
(186) Вот и пусть они лежат под капотом. Нам главное чтобы на капоте была бизнес логика без всяких циклов.
   Шоколадная страсть
 
192 - 16.07.20 - 22:46
(189) Ну а Москва - столица России. Что ты пытаешься доказать? Что мутабельность - это хорошо?
   Ненавижу 1С
 
193 - 16.07.20 - 22:53
(191) думаю тут главное в обслуживании кода: читабельности, отладке, изменяемости и т.д.
если все это дается легко и хорошо в таком подходе, то это прекрасно
но видимо пока не все так радужно или мы не можем красиво это реализовывать
   vde69
 
194 - 16.07.20 - 22:53
(192) мутабельность - это данность на которую нельзя повлиять программно, то есть от кода ты ничего не меняешь....

мутабельность это не ошибка а правило и если ты ему не следуешь получаешь ошибку...


почитал твою ссылку про "чистые функции" - еле вылез из под стола.... для остальных выкладываю
------------------------------------------------------------------

1. Чистые функции должны принимать аргументы.
2. Одни и те же входные данные (аргументы) всегда произведут одинаковые выходные данные (вернут одинаковый результат).
3. Чистые функции основываются только на внутреннем состоянии и не изменяют внешнее (примечание: console.log изменяет глобальное состояние).
4. Чистые функции не производят побочных эффектов.
5. Чистые функции не могут вызывать нечистые функции.


------------------------------------------------------------------

то есть в этой концепции нельзя получать данные извне (например из SQL или COM или драйвера клавиатуры).
   Ненавижу 1С
 
195 - 16.07.20 - 22:58
(194) ну опять же есть разные определения "чистоты", кому-то достаточно ничего не изменять
то есть, например, функция выполняет запрос в БД и возвращает результат - такая функция может получать при одинаковых параметрах разные результаты (ну или иначе считать саму базу данных ее параметром :-)))
но она ничего не меняет в базе данных. В определенном смысле она "чистая"
   Шоколадная страсть
 
196 - 16.07.20 - 23:09
(193) На 1С может и не можем. Но на том же JS вполне можно, там все есть.
   Шоколадная страсть
 
197 - 16.07.20 - 23:11
(194) Ты про иммутабельность или про чистые функции? Определись сначала что мы обсуждаем в данный момент.
   Шоколадная страсть
 
198 - 16.07.20 - 23:12
Конечно в чистых функциях нельзя получать данные извне. На то они и чистые.
   Злопчинский
 
199 - 17.07.20 - 03:05
"извне" - это где?
параметры входные - это же извне?
   Шоколадная страсть
 
200 - 17.07.20 - 05:20
(199) Кроме входных параметров.
  1  2  3   

Список тем форума
Рекламное место пустует  Рекламное место пустует
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс, 1996 г.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.