Давайте учить PHP!

RiDDi
На сайте с 06.06.2010
Offline
285
#201

вы бы лучше поспорили зачем $(elem) два раза готовый объект совать в $()

или зачем создавать отдельную переменную colvo ради единственной операции в val()

ух блин погромисты

вот поэтому, ТС, не надо учить пхп

учите то, что даст представление о логике происходящего в программе

ся учите для начала

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

Вебмастер отдыхает на бережках морей. Заработок в интернете - дело техники.
S
На сайте с 30.09.2016
Offline
469
#202
RiDDi:
вы бы лучше поспорили зачем $(elem)

Нет, ну относительно того, что это писал неопытный программист, A007MP прав - об этом свидетельствует дублирование объявления переменной через var, хотя бы. И бездумное применение шаблонных конструкций тоже. Но сама по себе эта шаблонная конструкция верна.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
danforth
На сайте с 18.12.2015
Offline
153
#203
edogs:
Зря.
Вы потратили время - свое напрямую (занимаясь оптимизацией), чужое косвенно (на отслеживание коммитов), Вы не знаете к каким последствиям это может привести (т.к. не знаете причин почему это было написано именно так и как следствие к чему Ваши изменения могли привести), Вы не получили заметного эффекта (замена -1+2 на ++ это не фига не оптимизация).
Ваши действия не только не позитивны, они негативны.

С этим соглашусь. Если у нас colvo пришло в виде строки, то colvo++ в первой итерации приведет сначала к числу и инкремента не произойдет. Если сделать colvo = colvo + 1; Мы можем получить конкатенацию. И только colvo = colvo - 1 + 2 сначала кастанет к числу, а затем инкрементирует изначальный счетчик. Но это песня про убогий дизайн JS.

A007MP:
Нет. Во-первых, полное отделение разметки от кода позволяет настолько абстрагироваться, что вся программа пишется с ходу, вообще не задумываясь, что, где и как должно отображаться. Во-вторых, сразу знаешь, в каких файлах что искать и менять, при смене дизайна.
Единственное, что я оставил (да и то - временно) пока в php - это ответ на ajax запрос - в файлах есть текстовые сообщения, которые выводятся пользователю. Но и это, на самом деле, делать нежелательно - все должно идти из базы. Таким образом проще будет сделать мультиязычную систему. А вот ответ на ajax запрос в виде части html (например для корзины) - тоже берется разметка из шаблона. Это позволяет менять дизайн только в одном месте, а не выискивать кучу мест, где это могло быть.

А ещё круче - использовать Clean Architecture подход, в котором приложение разделяется на 4 слоя:

Entities - бизнеслогика: сущности, методы и функции

Use Cases - логика приложения, взаимодействие entities между собой, управление потоком данных.

Interface Adapters - абстракции для доступа взаимодействия с внешним миром (MVC, MVVM или что-то другое)

Frameworks & Drivers - библиотеки внешнего мира, тут настраивается слой между адаптерами и библиотеками.

При таком подходе, любое изменение слоя затрагивает только один слой, и не более. Поменялась логика взаимодействия - сменили use cases, нашли роутер по производительнее , заменили frameworks & drivers.

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

Junior Web Developer
edogs software
На сайте с 15.12.2005
Offline
775
#204
RiDDi:
вы бы лучше поспорили зачем $(elem) два раза готовый объект совать в $()
или зачем создавать отдельную переменную colvo ради единственной операции в val()

1) Не объект, а результат поиска так-то.

2) Что бы избежать монструозного кода. А то понапишут полпроекта в одну строку.

danforth:
С этим соглашусь. Если у нас colvo пришло в виде строки, то colvo++ в первой итерации приведет сначала к числу и инкремента не произойдет. Если сделать colvo = colvo + 1; Мы можем получить конкатенацию. И только colvo = colvo - 1 + 2 сначала кастанет к числу, а затем инкрементирует изначальный счетчик. Но это песня про убогий дизайн JS.

В пхп, кстати, тоже такое есть.

$z='a';

$z++;

echo $z;

По логике - '1'. На самом деле - 'b'.

danforth:
А ещё круче - использовать Clean Architecture подход, в котором приложение разделяется на 4 слоя:
Entities - бизнеслогика: сущности, методы и функции
Use Cases - логика приложения, взаимодействие entities между собой, управление потоком данных.
Interface Adapters - абстракции для доступа взаимодействия с внешним миром (MVC, MVVM или что-то другое)
Frameworks & Drivers - библиотеки внешнего мира, тут настраивается слой между адаптерами и библиотеками.

При таком подходе, любое изменение слоя затрагивает только один слой, и не более. Поменялась логика взаимодействия - сменили use cases, нашли роутер по производительнее , заменили frameworks & drivers.

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

Согласны.

Но все же - иногда нужны "грязные хаки". В большинстве случаев нет времени (по крайней мере оплаченного заказчиком) что бы сидеть и перфекционировать на архитектуру. Есть задача "я не знаю как но что бы к утру было сделано" и просьба "в разумные деньги" и простой выбор - грязный хак который займет полчаса и будет оплачен как час (с округлением) или красивое кошерное решение которое займет часов 6 и один черт больше одного часа не оплатят (т.к. "че там делать-то было"). Естественно, при наборе некоторой критической массы грязных хаков скопившихся примерно в одном месте есть смысл отрефакторить это дело, но опять же - на рефакторинг кучи грязных хаков чохом уйдет в разы меньше времени чем если не хакать, а делать всё кошерно изначально.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
VoV@
На сайте с 22.09.2007
Offline
196
#205
danforth:
С этим соглашусь. Если у нас colvo пришло в виде строки, то colvo++ в первой итерации приведет сначала к числу и инкремента не произойдет.

Разве? В js это приведёт к NaN.

Это если в поле $(elem).find(".inp_num") хулиган ввёл буковки.

Да и colvo = colvo - 1 + 2 тоже даст NaN.

⭐ Разработка Андроид-приложений (Xamarin C#). ⭐ Разработка ASP.NET (WebForms, MVC, WebAPI, Core). ⭐ Цой жив!
danforth
На сайте с 18.12.2015
Offline
153
#206
edogs:
Согласны.
Но все же - иногда нужны "грязные хаки". В большинстве случаев нет времени (по крайней мере оплаченного заказчиком) что бы сидеть и перфекционировать на архитектуру. Есть задача "я не знаю как но что бы к утру было сделано" и просьба "в разумные деньги" и простой выбор - грязный хак который займет полчаса и будет оплачен как час (с округлением) или красивое кошерное решение которое займет часов 6 и один черт больше одного часа не оплатят (т.к. "че там делать-то было"). Естественно, при наборе некоторой критической массы грязных хаков скопившихся примерно в одном месте есть смысл отрефакторить это дело, но опять же - на рефакторинг кучи грязных хаков чохом уйдет в разы меньше времени чем если не хакать, а делать всё кошерно изначально.

Я меня был один проект, где заказчик подгонял меня и просил быстрее-быстрее, ставил мне сроки. Я писал код быстрей-быстрей, как он и просил. В итоге это вылилось в несколько месяцев разработки, и поддерживать это теперь будет сложно. Я сделал вывод для себя, кроме того, что не работать с заказчиками, которые подгоняют, никогда не забивать на проектирование, и сначала думать, потом писать. Если бы я посидел и почертил диаграмки пару недель, то в итоге, приложение было бы готово на месяц раньше, и было бы намного качественней адаптировано под всякие изменения.

Да и с тем, что отрефакторить - быстрее, не соглашусь. Отрефакторить изначально продуманный проект, согласен. Но если начать писать сразу и по быстрому, потом это проще переписать с нуля, чем начать что-то рефакторить. Да и в целом, я когда делаю рефакторинг - значаю покрываю тестами ту часть кода, которую рефакторю, а затем начинаю переписывать функцию/метод.

edogs:
По логике - '1'. На самом деле - 'b'.

Странная логика, почему 1? Если 'a' - по ASCII в десятичной системе это 97, проинкрементировав (для этого привести к числу), вы получите 98, и конвертнув обратно число в строку, вы получите 'b'. Не знаю как PHP работает с последовательностью сивмолов, но в нормальных языках примерно так и работает - строка это иммутабельный поток int32 чисел (для последнего стандарта utf8, где на один символ может уходить 4 байта).

---------- Добавлено 30.06.2018 в 11:55 ----------

VoV@:
Разве? В js это приведёт к NaN.

Откройте консольку и посмотрите:

var a = '10';

undefined
a++
10

var a = '10';

a = a + 1;
"101"

var a = '10';

undefined
a = a -1 + 2;
11
VoV@
На сайте с 22.09.2007
Offline
196
#207
danforth:

Откройте консольку и посмотрите:

Открыл жсфиддле и посмотрел:

var t = "a";

t++;

alert(t);

t-1+2;

alert(t);

danforth
На сайте с 18.12.2015
Offline
153
#208

VoV@, я чет сначала и не увидел, что вы про буковки писали. Даже если хулиган введет циферки в инпут, они все равно прилетят в виде строки. Мои примеры как раз и описывают это.

edogs software
На сайте с 15.12.2005
Offline
775
#209
danforth:
Я меня был один проект, где заказчик подгонял меня и просил быстрее-быстрее, ставил мне сроки. Я писал код быстрей-быстрей, как он и просил. В итоге это вылилось в несколько месяцев разработки, и поддерживать это теперь будет сложно. Я сделал вывод для себя, кроме того, что не работать с заказчиками, которые подгоняют, никогда не забивать на проектирование, и сначала думать, потом писать. Если бы я посидел и почертил диаграмки пару недель, то в итоге, приложение было бы готово на месяц раньше, и было бы намного качественней адаптировано под всякие изменения.

Не, тут Вы говорите о ситуации когда отказ от планирования привел к увеличению сроков разработки.

Мы безусловно согласны, что планирование надо всегда. Но говорим о том, что иногда следует применить грязный хак, если это будет оправдано целями проекта (сократит сроки разработки, сделает код быстрее и т.д.).

Более того, перефразируя известную истину - "грамотно сделанный хак ничем не отличается от фичи бай дизайн":) Если хак не вписывается в архитектуру, но не влияет на нее - это отличный, правильный хак.

danforth:
Странная логика, почему 1? Если 'a' - по ASCII в десятичной системе это 97, проинкрементировав (для этого привести к числу), вы получите 98

'a' строковое. Приводя строку не являющуюся числом к числу в пхп - мы получаем 0. Приведя к числу 'a' получим 0, а не 97, можете проверить var_dump(intval('a')); При арифметической операции - должно сначала выполнится приведение и дать ноль, потом к нему должно прибавиться 1 и дать 1. Но нет, будет 'b'.

danforth:
, и конвертнув обратно число в строку, вы получите 'b'. Не знаю как PHP работает с последовательностью сивмолов, но в нормальных языках примерно так и работает - строка это иммутабельный поток int32 чисел (для последнего стандарта utf8, где на один символ может уходить 4 байта).

Как можно вообще называть нормальным язык где нет строгой типизации? При которой ++ к строке просто выдаст ошибку компиляции?

Как Вам такое в пхп (научим ТС плохому)?

$z='z';

$z++;

echo $z;

выведет 'aa';

Что бы оставаться в топике - ноги бы поотрывать тем, кто пишет ++ к строкам и использует это в продакшене:)

VoV@
На сайте с 22.09.2007
Offline
196
#210

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий