Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Флейм (http://www.flasher.ru/forum/forumdisplay.php?f=53)
-   -   Коротко и не ясно. (http://www.flasher.ru/forum/showthread.php?t=211622)

Bletraut 03.10.2015 13:37

Коротко и не ясно.
 
Собственно интересно посмотреть на решение некоторых вопросов в программировании как можно более коротким способом, а именно в одну строку. ХД

Например, сеттер альфы в одну строку

Код AS3:

public function set alpha(n:Number):void { _alpha = (n < 0) ? 0 : (n > 1) ? 1 : n; }

Решение задачи по программированию

Код AS3:

for (var i:int = 1, c:int = 1; i <= n; ++i, c += (Number("0." + i) <= Number("0." + k)) ? 1 : 0 ) if (i == n) trace(c);

Делитесь своими решениями ХД

caseyryan 03.10.2015 14:07

И что в этом особеного? Беспонтовая запись. Такой галимотьи лучше всегда избегать. Это хорошо для каких-нибудь тестов на знание языка (или даже скорее на логику мышления), но для рабочих проектов - это ужасно
Вот здесь таких примеров хоть завались

Bletraut 03.10.2015 14:13

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

Zebestov 03.10.2015 14:48

Код AS3:

function someAction(someArg:*, result:SomeClass = null):SomeClass {
    result = result || new SomeClass(); // < вот такая запись у меня повсеместено
    // вычисления, результат которых необходимо вернуть
    // в виде экземпляра класса SomeClass
    // ...
    return result;
}


caseyryan 03.10.2015 15:09

Цитата:

Сообщение от Zebestov (Сообщение 1187608)
Код AS3:

function someAction(someArg:*, result:SomeClass = null):SomeClass {
    result = result || new SomeClass(); // < вот такая запись у меня повсеместено
    // вычисления, результат которых необходимо вернуть
    // в виде экземпляра класса SomeClass
    // ...
    return result;
}


Я даже знаю чем это навеяно :D

Zebestov 03.10.2015 15:16

Ну, у меня это началось с ковирания Starling-а :) а потом плотно вошло в мою жизнь!

Bletraut 03.10.2015 15:34

Цитата:

Сообщение от Zebestov (Сообщение 1187608)
Код AS3:

function someAction(someArg:*, result:SomeClass = null):SomeClass {
    result = result || new SomeClass(); // < вот такая запись у меня повсеместено
    // вычисления, результат которых необходимо вернуть
    // в виде экземпляра класса SomeClass
    // ...
    return result;
}


И как это работает? В чем суть?

Zebestov 03.10.2015 15:37

Что именно? Это это запись типа "если аргумент result зашел как null, придется создать его, чтобы было что возвращать". В противном случае мы работаем с тем объектом, который нам предоставили. Это порой здорово экономит время.

Добавлено через 3 минуты
Ну и всякое такое прочее в одну строку и коротко, вроде такого:
Код AS3:

isDragging && update(); // Обновляем сцену, если в настоящий момент происходит таскание объекта
isDragging || move(); // Если таскание объекта не происходит, двигаем его программно


ZackMercury 03.10.2015 15:56

Zebestov, а так нельзя, чтоли?
Код AS3:

function someAction(someArg:*, result:SomeClass = new SomeClass()):SomeClass {
    // вычисления, результат которых необходимо вернуть
    // в виде экземпляра класса SomeClass
    // ...
    return result;
}

UPD: скомпилил, нельзя)

caseyryan 03.10.2015 16:04

Цитата:

Zebestov, а так нельзя, чтоли?
Код AS3:

function someAction(someArg:*, result:SomeClass = new SomeClass()):SomeClass {
    // вычисления, результат которых необходимо вернуть
    // в виде экземпляра класса SomeClass
    // ...
    return result;
}


Ну во-первых такая конструкция даже не скомпилируется. А во-вторых какой в ней смысл?
У Вадима там при передаче объекта используется он, а при передаче null, создается новый. Зачем создавать новый при любых условиях?

ZackMercury 03.10.2015 16:05

caseyryan, не при любых условиях. В скобках указываются значения по умолчанию.
например
Код AS3:

function f(something:int = 4, something2:int = 65):int
{
  ...
}


caseyryan 03.10.2015 16:07

1) Это работает только для примитивных типов
2) Если значением по умолчанию у тебя каждый раз при вызове функции будет новый объект, то именно создание нового при любых условиях и получается

Zebestov 03.10.2015 16:09

Нене, caseyryan, !еслибыонобыловозможно!, то таки создавалось бы только тогда, когда аргумент опущен. Но фигушки :)

caseyryan 03.10.2015 16:12

Цитата:

то таки создавалось бы только тогда
А, ну да. Это я тупанул малость

Psycho Tiger 04.10.2015 12:11

Код AS3:

result = result || new SomeClass()

Слишком писать много!
Код AS3:

result ||= new SomeClass()

:3

Zebestov 04.10.2015 12:13

Чота Котяра говорил, что такая запись глючила (а може я путаю).

caseyryan 04.10.2015 13:24

Я такую запись в синглтонах использую. Ни разу еще не глюканула

Zebestov 04.10.2015 13:30

Возможно путаю. Надо Котяру ждать, може он вспомнит.

dark256 06.10.2015 20:14

Максимум краткости и минимум ясности - это регулярки....
Тут у них победа техническим нокаутом...

caseyryan 06.10.2015 20:20

Ну, минимум ясности там только если ты в них ничего не понимаешь. А если понимаешь, то все логично и ясно

Zebestov 06.10.2015 20:23

Ой всё! Людям, которые с налёту понимают регулярки, необходимо сдавать тесты на неинопланетность :)

caseyryan 06.10.2015 20:32

Ну не с налета, но их реально можно понять довольно просто) У Фриддла в книжке сразу было написано как их надо читать.

Zebestov 06.10.2015 20:38

caseyryan, ты сейчас наговорил не депортацию с планеты, ты в курсе? ))

dark256 07.10.2015 11:15

Палится кейс, ох палится..... Не ведает левая третья пара щупалец, что творит правая пятая.... :)))))

caseyryan 07.10.2015 11:23

:D
http://www.moviewallpapers.ru/images...a_1024_020.jpg

etc 07.10.2015 21:27

Цитата:

Сообщение от Psycho Tiger (Сообщение 1187665)
Код AS3:

result = result || new SomeClass()

Слишком писать много!
Код AS3:

result ||= new SomeClass()

:3

Лучше симпл:

Код AS3:

if (!result) result = new SomeClass();


Zebestov 07.10.2015 21:40

Тю, это может и не особо длинно, но до неприличия ясно! )

etc 07.10.2015 21:46

Цитата:

Сообщение от Zebestov (Сообщение 1187798)
Тю, это может и не особо длинно, но до неприличия ясно! )

Вот именно, а ясность куда важнее краткости. Вариант с || ещё куда ни шло, но выглядит не очень (result = result), а с ||= вообще не у всех в мозгу сходу распознаётся.

Zebestov 07.10.2015 21:57

Ну, это уже дело привычки, спорить не стану. Другое дело, что можно и так (но это будет уже почти if и не так элегантно):
Код AS3:

result || (result = new SomeClass());


Psycho Tiger 08.10.2015 09:08

Цитата:

Сообщение от etc (Сообщение 1187800)
Вот именно, а ясность куда важнее краткости. Вариант с || ещё куда ни шло, но выглядит не очень (result = result), а с ||= вообще не у всех в мозгу сходу распознаётся.

Ну, тогда и
Код AS3:

if(!result)

лучше избегать.
Лучше вот так
Код AS3:

if (result == false)

и привести к одному типу, на всякий
Код AS3:

if (Boolean(result) == false)

Выглядит откровенно плохо. Потому что if (!result) устоявшееся выражение и среднестатистический кодер понимает, что оно значит. С || и ||= чуть сложнее на первый взгляд и нужно знать что логический оператор "или" возвращает не логический тип Boolean по многим заблуждениям (вот тут то все и валятся!), но это настолько устоявшееся выражение в других языках (особенно с теми, у которых есть statement modifiers), что мне удивительно его игнорирование здесь.

alexcon314 08.10.2015 10:12

про быитовые сдвиги нужно еще пофлеймить же!

dark256 08.10.2015 11:11

Код AS1/AS2:

2BEER||!2BEER


Zebestov 08.10.2015 14:40

Проверка на нечетность val&1 вместо val%2, но то такое.

callme 09.10.2015 10:11

кто побьет моё кунг-фу?
Код AS3:

function someAction(someArg:*):SomeClass {
    return someAction_optimized( someArg, new SomeClass() );
}
 
function someAction_optimized(someArg:*, result:SomeClass):SomeClass {
    // ...
    return result;
}


Zebestov 09.10.2015 11:11

эмм… и?

callme 09.10.2015 11:23

я пришел к этому подходу уже после твоего подхода

Zebestov 09.10.2015 11:27

Може я туплю, но я не могу понять, в чем фишка (

caseyryan 09.10.2015 11:27

Цитата:

Сообщение от callme (Сообщение 1187846)
кто побьет моё кунг-фу?
Код AS3:

function someAction(someArg:*):SomeClass {
    return someAction_optimized( someArg, new SomeClass() );
}
 
function someAction_optimized(someArg:*, result:SomeClass):SomeClass {
    // ...
    return result;
}


я даже знаю где этот код должен быть ;)

callme 09.10.2015 11:30

Цитата:

Сообщение от caseyryan (Сообщение 1187853)
я даже знаю где этот код должен быть ;)

аргументируй

Zebestov 09.10.2015 11:33

callme, лучше расскажи, что твой код делает.


Часовой пояс GMT +4, время: 10:28.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.