• А вы используете нижнее подчеркивание для именования глобальных переменных?

    bagyr
    @bagyr
    Нет. Для случаев, когда сам не уверен что пишешь/закончилось воображение/какой-то конфликт, есть this.
    Python-style мне не нравится даже в самом питоне.
    Ответ написан
    Комментировать
  • А вы используете нижнее подчеркивание для именования глобальных переменных?

    retran
    @retran
    Где вы в C# нашли глобальные переменные?
    То что у вас — это поля класса, и да — их принято писать с подчеркиванием.
    Ответ написан
    2 комментария
  • А вы используете нижнее подчеркивание для именования глобальных переменных?

    VasKravchuk
    @VasKravchuk
    когда использую С#, если private/protected то начинаю с маленькой буквы, если public элемент — с большой, без подчеркиваний.
    Стараюсь делать как написано в msdn guidline.
    У каждого языка свои стандарты + кому как нравится :)
    Ответ написан
    Комментировать
  • А вы используете нижнее подчеркивание для именования глобальных переменных?

    @gro
    Отсутствие глобальных переменных позволяет понимать код ещё лучше.
    Ответ написан
    1 комментарий
  • А вы используете нижнее подчеркивание для именования глобальных переменных?

    XaBoK
    @XaBoK
    Традиционно с символа подчёркивания начинается имя закрытой (private) переменной, константы набирают в верхнем регистре (полностью заглавными буквами), а всё остальное с маленькой буквы.
    Ответ написан
    Комментировать
  • ООП головного мозга?

    AtomKrieg
    @AtomKrieg
    Давай я поищу в Google за тебя
    Когда вы пишете лабораторку или собственный маленький проектик, то можете делать как вам угодно.
    А теперь представьте себе ситуацию когда в команде программистов вы написали класс с публичными переменными, а потом подошел руководитель проекта и сказал что на каждое присваивание переменной надо делать запись в лог-файл. Теперь все программисты, которые пользовались вашим классом, вместо работы переписывают код с переменных на сеттеры.

    Советую почитать "Совершенный код", чтобы не задавать подобные вопросы.
    Ответ написан
    2 комментария
  • Javarush.Стоит ли там учиться, или же лучше по книжкам?

    @lightGray
    мне очень помогло для старта. Желательно на акцию попасть по вдвое сниженной цене. Аналогов у них пока нет.
    Сам продолжаю учиться через необычную форму вебинара. Гугли getJavaJob. Это вк паблик.
    По книжкам в большинстве случаев - нудный отстой. Без них никак, но практики должно быть больше.
    Ответ написан
    Комментировать
  • Когда в PHP использовать интерфейсы, а когда абстрактные классы?

    sainnr
    @sainnr
    Как пишут умные люди (Шилдт, Троелсен) в своих умных книжках, интерфейс определяет функциональные возможности, поведение — «что именно следует делать, но не как это делать» (Г.Шилдт, Полное руководство C#). В абстрактном классе «определяется лишь самая общая форма для всех его производных классов, а наполнение ее деталями предоставляется каждому из этих классов» (там же).

    Простой пример, в контексте графического редактора можно определить:
    Абстрактный класс — Figure (геометрическая фигура), от него могут быть образованы классы конкретных фигур — например, Rectangle, Circle и т.д.
    Интерфейс — Drawable (то, что можно нарисовать). Он может быть реализован как во всех классах конкретных фигур (Circle, Rectangle), так и в других классах, не образованных от абстрактного Figure.
    Ответ написан
    Комментировать
  • Когда в PHP использовать интерфейсы, а когда абстрактные классы?

    try4tune
    @try4tune
    С точки зрения архитектуры:

    Интерфейс описывает свойства. Обратите внимание на классические названия интерфейсов: Throwable, Countable, Comparable, Iterable и т.д. Возьмем, к примеру, интерфейс Rollable (катящийся), и Foldable (складывающийся).

    Абстрактный класс же описывает сущность. Например, стол: Table_Abstract. Стол может быть деревянным, тогда будет Table_Wood extends Table_Abstract. Также стол может быть хирургическим: Table_Surgical extends Table_Abstract. В таком случае Table_Abstract объединяет общий свойства всех столов (скажем, площадь поверхности, наличие ножек и т.п.). А конкретный класс описывает сущность определенного типа столов.

    Связью же интерфейсов и классов Вы описываете свойства. Например, стол можно катить: Table_Abstract implements Rollable. Деревянный стол, например, можно сложить: Table_Wood implements Foldable.
    Ответ написан
    5 комментариев
  • Какова роль интерфейсов в ООП?

    Дело нехитрое. Нужда в интерфейсах возникает, когда над кодом начинает работать более 1 человека. Себя, Матвей, вы контролировать можете, коллегу – уже в меньшей степени.
    Еще печальней дела обстоят, когда вы выпускаете код, который может быть расширен неизвестно кем, неизвестно с какой целью (фреймворки). Очевидно, вам захочется сообщить будущим пользователям вашего кода, как конкретно этим кодом следуе пользоваться. Именно эту задачу решают интерфейсы.

    Напоследок скажу вам, что ваше сознание не статично. Через 3 года Матвей тогдашний будет сильно отличаться от Матвея сегодняшего. И будущий Матвей будет чрезвычайно признателен Матвею сегодняшнему, если правила пользования его за 3 года страсть как разросшегося кода будут по-прежнему аккуратно систематизированы в том числе с помощью интерфейсов.
    Ответ написан
    Комментировать
  • Какова роль интерфейсов в ООП?

    Много ответов есть уже, лучше попробую идти рядом с вашими словами. Итак,
    > Зачем мне создавать файл, контролирующий это, если я и сам могу контролировать то, какие методы у меня есть
    Вы - это ваша голова, вы человек, не робот, ваш может не быть на работе например, или вы сами можете забыть, как у вас взаимодействуют части системы. Интерфейсы - это в общем-то тоже документация. И не нужно строго различать "чисто интерфейсы", и интерфейсы класса - те методы, которые у класса паблик - это точно такой же интерфейс, только он явно не отделен от класса. Когда у класса всего 3-4 метода, и все они связаны простой идеей, то и выделять ничего не надо. Когда у класса уже 10 методов, и среди них есть небольшие смысловые группы, то уже имеет смысл эти группы подчеркнуть. И, в конце концов, вместо каши из 10 методов, вы читаете следующее: class Graph : IEnumerable, IIndexable, IDrawable - и вы знаете, что ваш граф перечисляется, индексируется и рисуется. Это уже очень много информации, вы уже понимаете, как взаимодействуют части вашей системы.

    > Может создано это для работы в больших коллективах? Но ведь тогда любой участник сможет поправить и интерфейс.
    Да, совершенно верно, для больших коллективов. Нет, участник просто так не сможет поправить интерфейс, не побеседовав с остальными. В лучшем случае участнику придется поправить весь код, который "висит" на этом интерфейсе, в худшем - он в принципе ничего не сможет поменять, если интерфейс "публичный" и используется несколькими командами разработчиков. Классический пример - системы плагинов. Если к MS Word-у уже написано куча плагинов, то MS не может взять и просто так поменять ифейсы, не поломав совместимость. Хотя некоторые аспекты реализации - может. Потому что, как уже сказали выше, интерфейс - это ДОГОВОР. Чем БОЛЕЕ он стабилен, тем ЛУЧШЕ. Команды договариваются (!), создавая интерфейсы, чтобы потом было как можно МЕНЬШЕ конфликтов и разногласий, т.к. проблемы с интерфейсом затрагивают всех. Найдите любую команду от 30 человек, и вы увидите, насколько это все важно.

    Еще две вещи напоследок:
    1) интерфейсы из ОО языков лишь частный пример понятие интерфейса в жизни вообще. Вы же, когда покупаете SATA-диск, наверное рассчитываете, что сможете его подключить к своему компу? А с чего вы взяли? А, ну конечно, ведь на упаковке написано SATA - значит производитель соблюдает ДОГОВОР - интерфейс передачи данных;
    2) необходимость в некоторых фичах языков сложно осознать в личных проектах и даже в маленьких командах. Это тоже как в жизни: свой дом, как говорится, должен построить каждый мужик, а чтобы построить бизнес-центр или высотку, нужны определенные знания, т.к. другие масштабы. Это нормально. Тем не менее, нужно читать и искать примеры. Хотя современные ОО-языки и сами дают много примеров. Раз у вас PHP, почитайте про Iterator например.
    Ответ написан
    1 комментарий
  • Какова роль интерфейсов в ООП?

    Приведу пример на коленке. Хотим, например, написать абстрактную файловую систему. Для начала, определим интерфейс, для ФС:

    interface FileSystemInterface {
      public function write($file, $data);
      public function read($file);
    }


    Затем, хочу реализацию интерфейса ФС для работы с файликами:

    class OSFileSystem implements FileSystemInterface {
      public function write($file, $data) {
         // открываем файлик, пишем данные
      }
    
      public function read($file) {
        // открываем файлик, возвращаем данные
      }
    }


    Вдруг, кому-то захотелось файловую систему в облаке. Окей, не проблема, реализуем это:
    class CloudFileSystem implements FileSystemInterface {
      public function write($file, $data) {
         // открываем соединение с облаком, пишем данные
      }
    
      public function read($file) {
        // открываем соединение с облаком, возвращаем данные
      }
    }

    Пусть у нас есть кой-то код, работающий с файловой системой, назовем его "Хранилище файлов". Пусть он выглядит примерно так:

    class FileStorage {
      protected $Fs;
      
      public function __construct(FileSystemInterface $Fs) {
        $this->Fs = $Fs;
      }  
    
      public function saveFile() {
        $this->Fs->write('file.txt', 'file data');
      }
    
      public function getFile() {
        return $this->Fs->read('file.txt', 'file data');
      }
    }


    Отлично! Теперь мы можем хранилищу файлов отдать любой объект с реализованным интерфейсом FileSystemInterface. Пример:

    // Хранилище файлов работает с файловой системой ОС:
    $FS = new OSFileSystem();
    $FileStorage = new FileStorage($Fs);
    $FileStorage->getFile();
    
    // Хранилище файлов работает с файловой системой в облаке:
    $FS = new CloudFileSystem();
    $FileStorage = new FileStorage($Fs);
    $FileStorage->getFile();


    Использование интерфейса, в данном случае. позволяет нам писать только реализацию работы файловой системы, а бизнес-логика, работающая с файловой системой никак не меняется, она знает, что в любом случае файловая система реализует интерфейс FileSystemInterface и может без опаски использовать методы этого интерфейса.
    Ответ написан
    14 комментариев
  • C# vs Java для удалённой работы за рубежом. Что востребовано?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Ориентироваться на зарплаты по языкам программирования - это полный идиотизм.
    Много платят за уровень специалиста, а не за язык.
    Найти опытного специалиста по PHP, который зарабатывает больше среднего специалиста по Java или C# - несложно.

    Поэтому пока вы годами будете выбирать и прыгать с одного на другое, кто-то другой уже приобретет опыт и устроится.
    Ответ написан
    Комментировать
  • C# vs Java для удалённой работы за рубежом. Что востребовано?

    @Ambrosian
    Востребованы специалисты.
    Знание конкретного языка - не важно. Да и вы упомянули - оба мейнстримовых
    А специалист - это не язык.
    Синтаксис учится быстро.
    Знания специалиста - это парадигмы, алгоритмы, паттерны и архитектура.
    А вовсе не знания языка. Если только это не английский
    ;)
    Ответ написан
    Комментировать
  • Перезалив чужих видео. Как не получить по шапке от Ютуба?

    Zoominger
    @Zoominger
    System Integrator
    Типа, доступ к видео по ссылке или что-то в этом роде?

    Нет.

    Задетектят ли перезаливы атворы и правообладатели? И чем это чревато, если да?

    Да. Влепят страйк и канал удалят.

    Можно ли как-то сделать чтобы не задетектили?

    Можно попытаться отзеркалить видео, может прокатить.
    Ответ написан
    2 комментария
  • Чем отличается дейтаграмма от пакета?

    @vitalybogryashov
    знаю много, но многого не знаю
    наверное проще сказать так: дейтаграммы - поток без установки соединения (пример - радио, ТВ, GPS), пакеты - упорядоченные упакованные данные для сборки сообщений с проверкой целостности на стороне клиента.
    Ответ написан
    1 комментарий
  • Как правильно хранить пароли от БД в git репозитории?

    Serhioromano
    @Serhioromano
    Web Developer
    ни знаю на чем проект так что посоветую но может не подойти.

    На свои nodejs проеты, я настраиваю переменные окружения ENV на сервере и локально. И ими пользуюс через process.ENV. Не уверен но кажется можно что то подобное для PHP замутить. Но я этого не знаю. Просто верю что должно быть хоть что то.
    Ответ написан
    8 комментариев
  • Как правильно хранить пароли от БД в git репозитории?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Dev / test окружение можно свободно в репозитории хранить. Production - обязан быть заигнорен.

    Если же репозиторий приватный (на своем сервере) + доступ к проду кому попало не дается, в принципе хранить настройки для него можно и в репозитории
    Ответ написан
    Комментировать
  • Как правильно хранить пароли от БД в git репозитории?

    Melkij
    @Melkij
    PostgreSQL DBA
    В репозитории кладётся db.conf.dist
    Далее на выбор:
    при установке требование создать свою конфигурацию db.conf на основе эталонной
    Или двухуровневый конфиг - сначала смотрим в db.conf, если там искомой опции нет или файла не существует - берём эталонную из *.dist.
    Ответ написан
    Комментировать
  • Как правильно хранить пароли от БД в git репозитории?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Никак не хранить их в git репозитории либо шифровать файлик с кредами в gpg архив по личным ключам + pass. Это пожалуй наиболее универсальный способ. Для любителей ansible есть ansible vault

    p.s. Хватит деплоить через git pull.
    Ответ написан
    7 комментариев