"PHP" / Говнокод #6101 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
private $data = array(
		'name' => '',
		'organization' => '',
		'mail' => '',
		'phone' => '',
		'comment' => '',
		'model' => '',
	);

Так адекватные люди создают асоциативные массивы? Или по другому?

Запостил: greshnik greshnik, (Updated )

Комментарии (26) RSS

  • Человек привык к Си и выделению памяти))
    Ответить
  • С одной стороны лучше посмотреть в одном месте, какие поля есть в массиве,
    чем косвенно это выяснять, лазия по всей проге.
    А с другой - никто же не проверяет соответсвие тому, как там вначале задекларировано - т.е. с тем же успехом можно было комментарий написать - что коментарий, что это объавление надо править вручную при изменении полей.
    Ответить
    • Если нужна структура данных для описания составного юнита, есть объекты. Ассоциативные массивы (или хэши) - это keyed свалка юнитов, они для другого нужны.
      Ответить
      • А для чего же они нужны?

        Будем честны: в скриптовых языках разницы между "объектами" и "ассоц массивами" быть не должно.

        Lua всё делает правильно. В каком-то смысле и JS, хотя там есть странный Map
        Ответить
        • > А для чего же они нужны?

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

          > Будем честны: в скриптовых языках разницы между "объектами" и "ассоц массивами" быть не должно.

          Язык - инструмент реализации информационной системы. Если программер использует структуры данных упуская их семантику, то это приводит к перлам и костылям типа такого: http://govnokod.ru/27396 (на месте нынешнего меня, я бы в головной структуре делал 2 поля: chars и total, в первом бы хранил хэш "символ-вес"). То что в JS нет на уровне языка разницы между объектами и хэшом - упущение дизайна (зачем для языка, который изначально разрабатывался как скриптуха для интерактива в веб-документиках, такой замороч?).

          В PHP же оно есть, так почему бы не использовать объект если заранее известно что там будет храниться и как с етими данными роботать?
          Ответить
          • Никакой семантической разницы между объектом/структурой и хешем/мапой/ассоц массивом в скриптовых языках нет.

            То, что в языках типа python есть для этого отдельные сущности, приводит к тому, что одно и тоже делается разными способами
            Ответить
            • Следуя такой же логике, раз в PHP нет разницы между обычным массивом и хэшом, использовать и числовые и строковые ключи в нем - хорошее решение с точки зрения архитектуры. Раз в Си нет классов, то можно любые процедуры размазывать по каким попало указателям и структурам.

              > То, что в языках типа python есть для этого отдельные сущности, приводит к тому, что одно и тоже делается разными способами

              Так ето свойство любого языка. There's more than one way to solve a problem.
              Ответить
              • Семантическая разница между массивом и хешем есть.

                Массив последователен, а хеш нет. Они используются для разных задач, и обычно всегда понятно нужен ли мне массив или хеш.

                Что такое "по каким попало указателям" мне особо понятно, тут трудно прокомментировать. Процедуры в Си обычно раскладывают по модулям (единицам странсляции, и соответствующим им заголовочным файлам).

                Структура и ассоциативный массив имеют одинаковую семантику: они отображают ключ на значение.

                В языках типа Java, C#, C++ эти сущности разные по двум причинам:

                * Структура намного эффективнее, ведь её поле это просто смещение
                * Декларация структуры содержит знание о типе

                В скриптовом языке обе эти причины неважны: скорость там всегда плохая, а статической типизации там нет.

                Нет никакой причины разделять случаи

                foo.bar
                и
                foo["bar"]

                часто бывает непонятно какой вариант выбрать, и почему.

                >. There's more than one way to solve a problem.
                Это плохо, и лучше бы уменьшать количество таких кейсов.
                Ответить
                • Как отличить bar, который является частью интерфейса словаря и позволяет изменить его поведение от bar, который я решил хранить в словаре?
                  Ответить
                  • Это годный вопрос. К счастью, instance методов у Object в JS мало, а у table в lua вроде и вовсе нет.
                    Ответить
      • и кстати, это специально для удобства копипасты сделали, что бы не заморачиваться с запятыми
        Ответить
        • Это не только для копипасты удобно, но и для временного однострочного закомментирования. Что строчку в середине списка комментировать, что последнюю — всё равно.
          Ответить
      • ...а потом удивляются, "откуда это дети берутся"?.. (с)
        Ответить
        • *задумался* копипастой? или наследованием? а, наверное специальным фабричным методом...
          я правда не знаю, потому что я - синглтон.
          Ответить
          • цит.:
            <<
            - Друзья мои, я бездетный!... Моя мама была бездетной, и бабушка была бездетной...
            - А откуда же ты?!?
            - Я?.. Я из Ялты...
            >>
            Ответить
  • У вас там в 2011-м году все любят руби
    %w[name organization mail phone].map { |k| [k, ''] }.to_h
    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8