Код, которым вы гордитесь
От: ManFeel Казахстан  
Дата: 11.07.14 20:28
Оценка:
У вас есть код, которым вы гордитесь, чтобы показывать, когда работадатели просят его показать? Я, например, горжусь вот этим руби кодом:

a, b = b, a

Он обменивает значения 2ух переменных. Просто и лаконично. И есть, что показать. Помимо репозиториев на гитхаб и битбакет. Или я чего-то не понимаю?
Re: Код, которым вы гордитесь
От: vsb Казахстан  
Дата: 11.07.14 20:31
Оценка:
a := a + b;
b := a - b;
a := a - b;


горжусь этим кодом. Это была первая моя задача по программированию (обменять значения двух переменных без третьей), с которой я успешно справился. Думаю с неё началось моё увлечение программированием.
Re: Код, которым вы гордитесь
От: __kot2  
Дата: 11.07.14 20:33
Оценка: :)
Здравствуйте, ManFeel, Вы писали:
MF>
MF>a, b = b, a
MF>

MF>Он обменивает значения 2ух переменных. Просто и лаконично. И есть, что показать. Помимо репозиториев на гитхаб и битбакет. Или я чего-то не понимаю?
если бы мне кто-то показал такой код на это вопрос, мне пришлось бы строчно убежать в другую комнату, чтобы проржаться
Re[2]: Код, которым вы гордитесь
От: ManFeel Казахстан  
Дата: 11.07.14 20:36
Оценка: :)
Здравствуйте, __kot2, Вы писали:

__>Здравствуйте, ManFeel, Вы писали:

MF>>
MF>>a, b = b, a
MF>>

MF>>Он обменивает значения 2ух переменных. Просто и лаконично. И есть, что показать. Помимо репозиториев на гитхаб и битбакет. Или я чего-то не понимаю?
__>если бы мне кто-то показал такой код на это вопрос, мне пришлось бы строчно убежать в другую комнату, чтобы проржаться

какой вопрос, такой и ответ. надоели уже.
Re: Код, которым вы гордитесь
От: AlexRK  
Дата: 11.07.14 20:36
Оценка:
Здравствуйте, ManFeel, Вы писали:

MF>Я, например, горжусь вот этим руби кодом:

MF>Он обменивает значения 2ух переменных. Просто и лаконично. И есть, что показать. Помимо репозиториев на гитхаб и битбакет.

Толстовато.
Re: ...это тот, который мне удалось не писать (-)
От: 0x7be СССР  
Дата: 11.07.14 20:57
Оценка: +1
Re: Код, которым вы гордитесь
От: andyag  
Дата: 11.07.14 20:58
Оценка: +1
Здравствуйте, ManFeel, Вы писали:

MF>У вас есть код, которым вы гордитесь, чтобы показывать, когда работадатели просят его показать? Я, например, горжусь вот этим руби кодом:


MF>
MF>a, b = b, a

MF>

MF>Он обменивает значения 2ух переменных. Просто и лаконично. И есть, что показать. Помимо репозиториев на гитхаб и битбакет. Или я чего-то не понимаю?

Очень горжусь вот этим кодом:
Re: Код, которым вы гордитесь
От: Shmj Ниоткуда  
Дата: 11.07.14 21:48
Оценка: -1
Здравствуйте, ManFeel, Вы писали:

MF>Он обменивает значения 2ух переменных. Просто и лаконично. И есть, что показать. Помимо репозиториев на гитхаб и битбакет. Или я чего-то не понимаю?


Видно что вы мыслите образами студента.

То что вы написали может и красивее, но практически в 99% случаев ничем не лучше:

temp = a;
a = b;
b = temp;


Красота должна быть в архитектуре. Насколько ее легко тестировать, расширять, добавлять новый функционал, поддерживать, ввести нового бойца в курс дела... Вот что важно!

А архитектуру в одном форумном сообщении не пояснить.
Re[2]: Код, которым вы гордитесь
От: ManFeel Казахстан  
Дата: 11.07.14 22:02
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Здравствуйте, ManFeel, Вы писали:




S>Красота должна быть в архитектуре. Насколько ее легко тестировать, расширять, добавлять новый функционал, поддерживать, ввести нового бойца в курс дела... Вот что важно!


S>А архитектуру в одном форумном сообщении не пояснить.


красота в репозиториях, которые я и упомянул.
Re[3]: Код, которым вы гордитесь
От: dimgel Россия https://github.com/dimgel
Дата: 12.07.14 00:51
Оценка:
Здравствуйте, ManFeel, Вы писали:

MF>какой вопрос, такой и ответ. надоели уже.


А, так то был крик души. Зачётно.
Re: Код, которым вы гордитесь
От: dimgel Россия https://github.com/dimgel
Дата: 12.07.14 00:59
Оценка:
Здравствуйте, ManFeel, Вы писали:

MF>У вас есть код, которым вы гордитесь, чтобы показывать, когда работадатели просят его показать?


Предлагаю варианты правильных ответов:

— Есть, но я его вам не покажу. Во-первых, а ты не сдохнешь, как наша корова? там дохрена, а во-вторых нефиг.

— Я горжусь почти всем, что пишу, потому что пишу не тяп-ляп. Но если дать написанному настояться и оглянуться на него через какое-то (достаточно большое) время, обычно выясняется, что гордиться там нечем, потому что во-первых, можно было бы и лучше, а во-вторых, какой смысл жить прошлым.
Re[2]: Код, которым вы гордитесь
От: dimgel Россия https://github.com/dimgel
Дата: 12.07.14 01:19
Оценка:
Здравствуйте, dimgel, мы писали:

— Есть, но я его вам не покажу. Во-первых, а ты не сдохнешь, как наша корова? там дохрена, а во-вторых а рожа не треснет? нефиг.
Re[2]: Код, которым вы гордитесь
От: abibok  
Дата: 12.07.14 02:18
Оценка: 15 (1) +2 -3 :))
vsb>
vsb>a := a + b;
vsb>b := a - b;
vsb>a := a - b;
vsb>


a = 2147483647, b = 12345. Получаем overflow и пометку профнепригодности у эйчаров.
На последнюю просьбу пациента "дайте заменить арифметику на xor" предложить a = b = 1 и назначить младшим помощником золоторя при ассенизационном обозе.
Re: Код, которым вы гордитесь
От: мыщъх США http://nezumi-lab.org
Дата: 12.07.14 02:20
Оценка:
Здравствуйте, ManFeel, Вы писали:

MF>Он обменивает значения 2ух переменных. Просто и лаконично. И есть, что показать.

это как бы базовая матчасть. демонстрирует значение руби на уровне faq.

вообразим себе картину. вы ищите работу и демонстрируете этот код, а я вас спрашиваю:
а) может ли этот код бросать исключения?
б) в каком порядке осуществляется обмен и кто это гарантирует (хинт: a,b = nil,a);
в) когда (б) не соблюдается и на выходе получается не [nil, nil], а [nil, a];
г) какие побочные эффекты имеет ваш код (хинт: гуглить write-only переменные);
д) какой оверхид имеет эта операция? (хинт: просиходит ли копирование содержимого переменных);


> Помимо репозиториев на гитхаб и битбакет. Или я чего-то не понимаю?

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

что же касается показать код, то я могу маркером на доске (или ручной на листке бумаги) написать код калькулятора с поддержкой скобок, приоритетов и в качестве небольшого бонуса — переменных и комментариев. ну типа: ammo_price_per_round = charge / rounds; charge = price — discount; price = box_price * boxes; discount = (boxes >= 5)?(price*discount_rate):0; discount_rate = (member)?0.15:0.10; rounds = boxes * rounds_per_box; rounds_per_box = 20; boxes = 12; box_price = $8.96;

обратите внимание на произвольный порядок присвоения переменных. они тут присваиваются в конце. это же калькулятор, а не программа. так удобнее. задал формулу для пересчета, а потом внезапно понял, что discount у нас разный в зависимости от членства -- добавил еще формулу в _конец_. ну и знак доллара подразумевает операции с фиксированной точкой. и его достаточно задать однажды, а дальше все операции будут вычисляться по принципу наибольшей точности, т.е. в данном случае с фиксированной точной. т.е. я хочу чтобы 1.23 + 44*2 + 3/4 + $1 + 16*3 было вычислено с использованием фиксированной точки везде. мелочь, а приятно. если АРХИТЕКТУРА парсера правильная, то эту фичу можно добавить и на лету без больших правок.

у меня это влезает на белую доску с маркером (или на блокнотный лист — меньше половины от A4). и оно даже транслируется. "оно" это написанный мной код. и в нем хорошо видна архитектура. причем, это как бы слегка нетривиальный пример. декларативные калькуляторы на каждой помойке не валяются, хотя на самом деле тут декларация реализована вполне имеративным способом — через компиляцию. грубо говоря как на том же руби можно объявлять функцию после ее вызова. руби на это чихать. он сначала парсит код и только если не находит нужной функции — только тогда ругается.

а у вас сколько займет это строк и времени? тот кто вас собеседует не начнет скучать? между прочим, декларативный калькулятор (на самом деле не декларативный, но разница настолько тонка, что незаметная) производит впечатление. кроме того, легким движением руки оно превращается в продвинутый парсер файла конфигурации, где нужна именно декларативность.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[3]: Код, которым вы гордитесь
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 12.07.14 03:36
Оценка: +1
Здравствуйте, abibok, Вы писали:

A>a = 2147483647, b = 12345. Получаем overflow и пометку профнепригодности у эйчаров.

A>На последнюю просьбу пациента "дайте заменить арифметику на xor" предложить a = b = 1 и назначить младшим помощником золоторя при ассенизационном обозе.

Фу, быть таким. Это наверняка сделано школьником (Паскаль) и было удивительно.
И наверняка значение 2147483647 присвоить не получится, потому что школьники учили (учат?) Паскаль на примере 16-битного ТурбоПаскаля.
Re[3]: Код, которым вы гордитесь
От: eskimo82  
Дата: 12.07.14 04:10
Оценка:
A>a = 2147483647, b = 12345. Получаем overflow и пометку профнепригодности у эйчаров.
Никакого overflow мы не получаем — Паскаль содержит целочисленую арифметику, аналогичную C/C++ — не влезающие биты просто отбрасываются. Код будет работать коректно (на 32 бит машине).

A>На последнюю просьбу пациента "дайте заменить арифметику на xor" предложить a = b = 1 и назначить младшим помощником золоторя при ассенизационном обозе.

xor использовать конечно более правильно, но вс еравно — Не понял юмора ?
Re[4]: Код, которым вы гордитесь
От: мыщъх США http://nezumi-lab.org
Дата: 12.07.14 04:49
Оценка:
Здравствуйте, eskimo82, Вы писали:


E>xor использовать конечно более правильно, но вс еравно — Не понял юмора ?

вообще-то a,b = b,a работает с любыми типами. там может быть и строка, и некий абстрактный объект. или одна переменная строка, а другая число. причем, обмен значениями происходит без оверхида, т.к. значения лежат на месте и никто их не трогает, меняются лишь переменные. точнее, идентификатору a соответствует то, что соответствовало b и наоборот.

вопрос на засыпку: является ли конструкция a,b = b,a эквивалентной (в смысле оверхида) конструкции: tmp = a; a = b; b = tmp; ответ обосновать. тут можно трепаться минут с полчаса, ибо есть о чем поговорить... под оверхидом подразумевается расходы на память (время), которые зависят от содержимого переменных
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re: Кодт, которым вы гордитесь
От: watchyourinfo Аргентина  
Дата: 12.07.14 05:28
Оценка: :)
fixed that for you
Re[5]: Код, которым вы гордитесь
От: eskimo82  
Дата: 12.07.14 06:19
Оценка:
E>>xor использовать конечно более правильно, но вс еравно — Не понял юмора ?
М>вообще-то a,b = b,a работает с любыми типами. там может быть и строка, и некий абстрактный объект. или одна переменная строка, а другая число. причем, обмен значениями происходит без оверхида, т.к. значения лежат на месте и никто их не трогает, меняются лишь переменные. точнее, идентификатору a соответствует то, что соответствовало b и наоборот.
Я так понимаю, нить темы потеряна, но я напомню: a = 2147483647, b = 12345. Получаем overflow и пометку профнепригодности у эйчаров.
Что кассается a,b = b,a то, безусловно, работает с любыми типами. Но не во всех языках, конкретно я знаю про Lua, а теперь еще про этот ваш Руби.

М>вопрос на засыпку: является ли конструкция a,b = b,a эквивалентной (в смысле оверхида) конструкции: tmp = a; a = b; b = tmp; ответ обосновать. тут можно трепаться минут с полчаса, ибо есть о чем поговорить... под оверхидом подразумевается расходы на память (время), которые зависят от содержимого переменных

Для начала, надо определиться о каком языке идет речь, ибо не во всех языках есть этот синтаксический сахар, и подозреваю, реализован он по разному. Конкретно в Lua он реализован поклажей на стек b,a и взятием со стека a,b, т.е. эквивалентен конструкции tmpa = a; tmpb = b; a = tmpb; b = tmpa; и соответсвенно не эквиватентен конструкции: tmp = a; a = b; b = tmp;
Re[6]: Код, которым вы гордитесь
От: watchyourinfo Аргентина  
Дата: 12.07.14 06:24
Оценка:
E>Я так понимаю, нить темы потеряна, но я напомню: a = 2147483647, b = 12345. Получаем overflow и пометку профнепригодности у эйчаров.

нигде не указано, что тип signed.
Может быть подразумевался само собой unsigned (который в абстрактной машине С складывается по модулю).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.