I ЛУЧШЕ'МЕНЯ? т СЕБ я kl UIUÜ di • 1/ . ■ Xdi -к ^ \ jL_V 11 / it-юмор :: geek (Прикольные гаджеты. Научный, инженерный и айтишный юмор)

it-юмор geek 
I ЛУЧШЕ'МЕНЯ?
		
		
т		
СЕБ	я	kl
UIUÜ	di	
		
		
• 1/ .	■ Xdi	-к
^ \		
jL_V	
	
	
	
11,it-юмор,geek,Прикольные гаджеты. Научный, инженерный и  айтишный юмор
Подробнее
I ЛУЧШЕ'МЕНЯ? т СЕБ я kl UIUÜ di • 1/ . ■ Xdi -к ^ \ jL_V 11
it-юмор,geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор
Еще на тему
Развернуть
do while используется в ситуациях, когда нужно, чтобы тело цикла отработало хотя бы один раз. Например, нужно сделать что-то, а если не получилось - повторить. И я, как человек регулярно использующий эту конструкцию, в очередной раз выражаю недоумение по поводу т.н. IT-юмора - у меня складывается впечатление, что пытаются шутить люди, знакомые с программированием только по школьным урокам.
Hellsy Hellsy 29.03.201921:27 ответить ссылка 9.2
я твой антагонист
Чур я тогда его девушка.
Trixie Trixie 30.03.201902:43 ответить ссылка -0.7
Теперь деритесь до смерти.
Циклы вообще для лохов. Хвостовая рекурсия рулит. =Ъ
Расскажи это системным программистам у которых маленький стек
Не важно, что у тебя стек маленький. Главное как ты им пользуешься. Для выполнения своей функции достаточно и маленького. И плевать, что все хотят его большой.
хвостовая рекурсия конвертится в цикл, зачем ей стэк?
villy villy 30.03.201911:56 ответить ссылка -0.1
Не только лишь все компиляторы/интерпретаторы умеют в оптимизацию хвостовой рекурсии.
Хвостовая рекурсия — это когда у твоего хвоста тоже есть хвост, у которого, в свою очередь, тоже есть хвост с хвостатым хвостом?
ты хочешь сказать, что есть что-то лучше goto?
по сути, для программирования хватит if'ов и goto , остальное придумали сами программисты чтобы себе жизнь облегчить)
Расскажи это питонистам
Сеньер-питонист на связи. do-while иногда сильно не хватает и приходится изгаляться со всяким говном в виде флагов.
Liksys Liksys 30.03.201901:33 ответить ссылка 2.2
Привет while True: if break
Вместо одной строчки - три.
Liksys Liksys 30.03.201901:41 ответить ссылка -0.8
А теперь об оплате: нам плятят за шашечки, ехать или количество строк?
MaXM00D MaXM00D 30.03.201903:06 ответить ссылка -0.6
Это тут никаким боком. Я предпочитаю короткие конструкции и синтаксический сахар, мне не нравится, когда язык ограничивается на основе того, что жуниоры могут неправильно использовать какие-то конструкции.
Liksys Liksys 30.03.201904:19 ответить ссылка 0.6
Бомж-питонист также выходит на связь. Я понимаю твою боль.
Верёвку Аллена Голуба почитай для начала, иначе складывается впечатление, что здесь только ты по школьным урокам знаком с профессией.
Ну, конкретное мнение зависит от источника, хотя, в принципе, почти все, хоть и не гонят пинками так же как goto, все же пренебрегают do while. "Можно, но лучше не надо" - общий вердикт.
Боязнь пользоваться do-while - она примерно там же, где и боязнь goto. В языках без сборки мусора без goto писать неприятно, потому что не ясно, как централизованно освобождать ресурсы по выходу из функции. Или прерывать циклы энного уровня вложенности - можно флагами, но goto удобнее. Его не добавляют в некоторые языки исключительно из-за того, что дурачки потом пишут на них логику. Мне кажется, это в корне неверный подход.
Liksys Liksys 30.03.201901:37 ответить ссылка 1.2
Скажем так - есть крайне ограниченный набор ситуаций в которых goto оправданно, в основном это встречается в случаях, когда надо написать код, быстро и эффективно обрабатывающий ошибки (типа ОС). В стандартном пользовательском приложении использование goto обычно тяжело оправдать. do-while может быть полезен, но нужно четко понимать: зачем он нужен. В противном случае легко багов навводить.
do-while так же создаёт баги, как и обычный while или if. В некоторых случаях даже безопаснее, т.к. в теле могут инициализироваться переменные, участвующие в условиипродолжения.
Да практически в любой сложной программе на си нужен goto, когда, например, аллоцируют пачку буфферов, открывают устройства, а потом в одном месте их закрывают - при обработке ошибок в рандомном месте или при успехе.
Liksys Liksys 30.03.201904:23 ответить ссылка 0.0
По моему опыту, большинство случаев, когда хочется воткнуть goto можно решить извлечением метода и заменой на return. Не всегда, конечно же.
Дилемма. Либо делать язык, который разрешает многое, но тогда найдутся дурачки, которые будут использовать его неправильно. Либо делать хороший язык, где нельзя говнокодить, только программы на нём плохо пишутся. Два стула в области программирования.
leosdren leosdren 30.03.201902:43 ответить ссылка -0.6
Практика показывает, что говнокодить можно на любом языке :D
Liksys Liksys 30.03.201904:23 ответить ссылка 1.8
И это правильный ответ!
ИМХО, goto чаще всего применяется как раз в языках без сборки мусора, а в особенности, в Си. Это очень распространенный случай, когда ты выделяешь какие-то буферы, открываешь файлы или иные ресурсы, в конце должен все закрыть. Но у тебя куча проверок на успешность операций, в случае фейла goto на очистку. В С++ этого можно избежать, обернув ресурсы в классы и воспользовавшись RAII.

3	// с
4	int too() {
FILE* f = topen (FILENAME, V);
6	i (!f) goto cleanup;
7
int* bufferl = (int*)malloc(BUFFERl SIZE*sizeof(int));
9	i (!bufferl) goto cleanup;
10
double* buffer2 = (doubie*)malloc(BUFFER2_SIZE*sizeof(int));
12	i (! butfer2) goto cleanup;
13
14	//...
15	cleanup:
16


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

template <class T>
29	class MyExceptionFreeWrapper
30	{
31	public:
32
s std::optional<MyExceptionFreeWrapper> makeunique(size t size) {
34	T* ptr = (T*)malloc(size);
35	if(!ptr) return std:rnullopt;
36	return MyExceptionFreeWrapper(ptr); //RVO
37	}
38
39	~MyExceptionFreeWrapper()
40	{
Я ровно то же самое писал тащемта)
Liksys Liksys 02.04.201921:56 ответить ссылка 0.9
Программирование - это целый мир, и есть в нём разные закоулки. Есть тут и мощные системы на джаве, построенные по всем канонам оо-проектирования, есть и перфомансный низкоуровневый код, где допускается больше говнокода в угоду быстродействию.
Лично я чаще использую for/foreach/map/filter, чем do-while, и полностью согласен с картинкой.
leosdren leosdren 30.03.201902:37 ответить ссылка -0.5
И тут ты получаешь легаси на java 6...
Не вижу goto...
его не впустили
Он еще хуже чем do while
INNER:
continue INNER;
нахер goto
бля, Иисус - ты должен освобождать людей от греха
Начни кодить на асэмблере - увидишь!
В Swift можно сделать такую забавную конструкцию

for case let object as SomethingProtocol in objects { }

или

for object in objects where object is SomethingProtocol { }


Очень удобно когда надо пройтись по фильтрованному массиву без сдвига индексов или предварительной фильтрации
Roxot Roxot 30.03.201901:13 ответить ссылка -0.1
Как мне кажется, фильтрация в циклах - какая-то муть. А её ещё в C++ 17 или 20 вводят.
Суть в том, что так с отфильтрованной коллекцией ничего нельзя сделать, кроме как пройтись по ней здесь и сейчас. Сохранить в переменную? Нет. Передать в функцию? Тоже нет. Второй раз пройти? Нет, надо снова писать такой же цикл!
Гораздо удобнее подход с filter в функциональном программировании или с generator expression in python. В этих случаях отфильтрованная коллекцию можно переиспользовать и/или сохранять в переменную/передавать как аргумент.
Ну в Swift можно вызвать метод filter для коллекции и в функциональном стиле отфильтровать а потом записать в переменную. Тут другой кейс использования. Допустим у тебя есть коллекция всех UIView и тебе нужно стереть текст из всех UIViewLabel (подкласс UIView) в стандартном подходе ты делаешь каст к нужному типу внутри цикла по всем элементам. Ну или сначала фильтруешь коллекцию по типу элементов а потом снова пробегаешься по всей коллекции. Это не круто. Решение пробегать только по необходимым элементам не удаляя остальные гораздо более гибкое и красивое.

В любом случае Swift это опенсорс проект (на данный момент последняя версия Swift 5) и у любой фичи языка есть четкое обоснование и одобрение сообщества. Не правильно говорить что это какая-то муть.
Roxot Roxot 30.03.201913:29 ответить ссылка 0.0
А, тут ещё и динамика замешана. Интересно. Впрочем, не так важно, по чему фильтровать.
Такая конструкция красивее простого цикла, хотя менее гибкая, чем filter+map и их аналоги на итераторах.
Результат filter можно засунуть в любое место, куда можно было засунуть массив, даже в тот же цикл с фильтрацией. Код становится более однородным, для разных обходов и преобразований коллекции используются одни и те же инструменты.
Понадобилось наложить фильтр на фильтр - filter удобнее цикла. Понадобилось отложить выполнение: сначала вычленить нужные элементы, а потом где-то стереть из них текст - filter удобнее цикла. Понадобилось применить стандартный алгоритм (например, в C++, что-нибудь из алгоритмов из STL) - filter удобнее цикла, для цикла надо реализовывать алгоритм ещё раз.
Хитрый цикл усложняет язык, а filter пишется в рамках существующего языка, в зависимости от задачи можно реализовать версию с копированием в новый список или, версию с итератором, чтобы O(1) по памяти. Если написать правильный bidirectional итератор, можно с помощью std::sort отсортировать отфильтрованные элементы прямо на их местах в коллекции. Написать несколько строк кода на обычном языке для конкретного проекта - гораздо проще и спокойнее, чем ждать месяцы заседаний комитетов, утверждений фичи, добавление в компиляторы, поддержка фичи долгие годы (из-за чего обновлённый язык выглядит уродливо), невозможность простого удаления фичи, если ей воспользовались в куче старого кода.

Чёткое обоснование можно к любой фиче написать. Формально восьми операций языка brainfuck хватает для написания любых вычислительных программ, всё остальное - мнения и оценки стоимости конкретных проектов с конкретными исполнителями :)
Сообществу не стоит доверять. Сообщества обычно плодят усреднённые компромиссные решения, рассчитанные на потребителя с усреднёнными показателями (которого не существует). А главное - полёт фантазии сообщества ограничен привычками, уже реализованными фичами и представлениями по здравом смысле.
А в чем отличие от анонимных функций в интепретаторах, типа for (sort {...} grep {...} @array ) или аналогичного оопешного варианта:
foreach (arr.grep(...).sort(...)) ?
Hellsy Hellsy 31.03.201919:14 ответить ссылка 0.0
1 - стандартный подход, 2 - функциональный, 3 - с использованием where.
class Joyreactor {
var array = ["one", "two", "three", "four", "five", "six"]
III Хочу вывести на экран слова из трех букв func printTriplesi) {
// 1
for word in array {
if word.count == 3 { print(word)
}
>
// 2
array.filter{ $0.count == 3 }.forEach{ print($0) }
// 3
for word in array
Roxot Roxot 01.04.201902:31 ответить ссылка 0.0
Так твой третий подход и есть функциональный. У тебя есть функция для фильтрации массивов, принимающая на вход анонимную функцию фильтрации элемента и сам массив.
Hellsy Hellsy 02.04.201923:04 ответить ссылка 0.0
Ты наверно перепутал, 2 - функциональный.

В третем это проход по массиву через for это конечно можно рассматривать как вызов функции для элементов массива, но этот вызов происходит для исходных элементов. Нет процесса фильтрации (создания отфильтрованного массива). Это довольно легко проверить на массиве большого размера.
Roxot Roxot 03.04.201903:54 ответить ссылка 0.0
Это нюансы производительности. Создается ли фильтрованная копия массива или массив оборачивается в геттер, выбирающий нужные элементы - особой роли в общем случае не играет.
Hellsy Hellsy 03.04.201911:57 ответить ссылка 0.0
Это Kotlin?
Это Swift 5, приложения под iOS / macOS на нем пишутся. Вообще он опенсорс но его порт под винду / linux не годится ни на что сложнее Hello World!
Roxot Roxot 04.04.201908:56 ответить ссылка 0.0
If
GOTO
Только зарегистрированные и активированные пользователи могут добавлять комментарии.
Похожие темы

Похожие посты
OH MY GOD I'd heard about Windows 11 calling a zip file a 'postcode file' in UK English because of really lazy translating but it's ACTUALLY HERE ON MY PC like not even in beta this is actually happening right now in publicly available Windows
O	Open	Enter
g^> Open with	>
Add to Favourites GO	Co
подробнее»

it-юмор geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор Windows 11 Windows Операционная система без перевода it humor geek windows 11 windows it юмор

OH MY GOD I'd heard about Windows 11 calling a zip file a 'postcode file' in UK English because of really lazy translating but it's ACTUALLY HERE ON MY PC like not even in beta this is actually happening right now in publicly available Windows O Open Enter g^> Open with > Add to Favourites GO Co
PC health at a glance
GEEKTOP
16 GB RAM 512GBSSD
Introducing Windows 11
Let's check if this PC meets the system requirements.
If it does, you can get the free upgrade when it's available.
. n Backup & svnc
подробнее»

Windows Операционная система Windows 11 tpm UEFI geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор

PC health at a glance GEEKTOP 16 GB RAM 512GBSSD Introducing Windows 11 Let's check if this PC meets the system requirements. If it does, you can get the free upgrade when it's available. . n Backup & svnc
Мой друг сказал что вышла \Л/Мо\лг511 и пора обновляться
Я с Windows 95
Мой банк с Windows 2000
подробнее»

it-юмор geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор Windows 11

Мой друг сказал что вышла \Л/Мо\лг511 и пора обновляться Я с Windows 95 Мой банк с Windows 2000