• Что такое обратный вызов в программировании?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Некоторые случаи использования коллбека (помимо асинхронного упомянутого использования):

    В коде: отложенный (ленивый) вызов.
    Например есть некий контейнер, в него мы регистрируем некие объекты с некоторой логикой.
    Но так как очень много таких кандидатов и они все запускаются, замедляя и работу и нагружая ресурсы, то мы бы хотели, чтобы контейнер просто знал о них, но при инициализации не запускал весь код создания этих объектов. На помощь приходят коллбеки — в коллбеке мы описываем логику создания объекта и (внимание) регистрируем именно коллбек с этой логикой создания, все — это очень быстро и легко, тк не наплодили объектов. Далее только при вызове нужного объекта контейнер видит, что зареган коллбек и вызывает его, тем самым инициализирует создание нужного объекта, описанное в этом коллбеке! ПРОФИТ!

    В коде: рекурсивно применить некоторый функционал к элементам коллекции.
    Очень популярное использование в Java в стримах.
    Есть коллекция элементов, запускаем некий map(), reduce(), filter(). walk() по набору элементов (коллекции) передавая в этот обход коллбек, и ожидаем, что получим результирующий набор после применения коллбека к каждому элементу. То есть этот коллбек будет выполнени внутри обхода, сама конструкция этих методов подразумевает, что вы передадите что-то что потом вызовется.

    Между системами: асинхронное взаимодействие
    Hook, callback
    Есть программа, которая ждет событий от внешней системы. Например есть платежная система Яндекс.Касса и есть ваш магазин. Вы отправили клиента на оплату в платежку, но он ушел "в путешествие" и вы не можете узнать судьбу платежа сразу. Вы можете бомбить сайт платежки, проверяя статус по номеру транзакции, а можете дождаться обратного вызова (коллбека, хука) от платежной системы с событием "Оплатил" или "Не оплатил, тк не хватило".
    Также в др системах — само оповестит, вызвав обратно уже меня.
    Ответ написан
    3 комментария
  • Что такое обратный вызов в программировании?

    Обратный вызов (англ. callback) — это ещё одна функция, которую вызовут «потом».

    Бытовой аналог – когда отправляешь в письме на радиостанцию пустой конверт со своим же адресом и марками, чтобы в нём прислали ответ.

    Обычно это нужно при асинхронном выполнении — когда строчки кода не последовательно выполняются одна за другой, а запускается (и отпускается) какая-то долгая задача и ещё неизвестно, когда она закончится.

    Например, нужно выполнить HTTP запрос к далёкому серверу и получить от него ответ.

    Тогда в функцию, которая займётся общением с далёким сервером, передают не только параметры запроса, но и callback-функцию, которая будет вызвана после получения ответа, с данными из ответа.
    Ответ написан
    1 комментарий
  • Что такое обратный вызов в программировании?

    @AlexSku
    не буду отвечать из-за модератора
    Я применял в Direct Show (обработка видео). Есть сторонний поток, который пропускает через себя кадры. Главная программа может постоянно его опрашивать, не появился ли новый кадр. Но зачем тратить время на опросы, когда они только редко будут возвращать положительный результат? Поэтому главная программа просто передаёт ссылку на свой обработчик (функция обратного вызова), а поток, пропускающий видео будет её вызывать всегда в нужное время (желательно, чтобы обработчик успевал всё сделать быстро).
    Ответ написан
    Комментировать
  • Что такое обратный вызов в программировании?

    Griboks
    @Griboks
    Когда функция выполняется долго, нет смысла ожидать её завершения (визуально это будет выглядеть как зависший браузер, и пользователь закроет сайт). Поэтому ей передают callback, мол, сама сообщишь, когда закончишь работу.
    Ответ написан
    Комментировать
  • Что такое обратный вызов в программировании?

    andreydobrin
    @andreydobrin
    Сложно , но это пока
    Все очень просто:
    Вы правильно сказали, что это функция, передающаяся как аргумент в другую функцию:
    пример с js
    function  first(callbak){
    ----здесь пишем код функции----
    ---- здесь можно записать код "функции обратного вызова" 
    и она сработает тогда, когда выполнится функция first()----
    }

    Простым языком - есть одна функция и у нее в параметре другая. Сперва выполнится сама функция, а потом та, которая является аргументом этой функции.
    Ответ написан
    Комментировать
  • Как изменить кодировку в консоли windows для отображения кириллицы?

    @res2001
    Developer, ex-admin
    Что cmd в винде уже нормально переносит UTF8?
    Помнится в Вин7 и ниже его корежило если выставить UTF8. Правда я с тех пор этой темой не интересовался.

    По вопросу - посмотрите эти ссылки:
    https://otvet.mail.ru/question/174325990
    https://superuser.com/questions/269818/change-defa...

    Но я бы просто использовал chcp. Можете сделать себе ярлык на раб.столе на cmd.exe, чтоб там при запуске срабатывала эта команда.
    Ответ написан
    Комментировать
  • Как в C# подключить свою библиотеку dll при работе из консоли?

    @none7
    shared1.cs
    public class MyShared {
        public static string getHello() => "Hello, World";
    }
    prog.cs
    class MyProgram {
    	static void Main(string[] args) => System.Console.WriteLine(MyShared.getHello());
    }

    csc /t:library shared1.cs
    csc /t:exe /r:shared1.dll prog.cs
    Ответ написан
    Комментировать
  • Объясните что такое полиморфизм простыми словами ?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Полиморфизм указывает, какую версию метода текущего объекта запустить.
    Например, у вас есть несколько наследуемых классов, с разной реализацией одного и того же метода. То есть, у вас есть несколько разных методов с одинаковым именем (и сигнатурой), реализованных в разных классах. Какую версию метода вызвать? Это зависит от типа переменной, в которой находится объект.
    Также с помощью полиморфизма можно поместить объекты разных классов в один массив с типом базового класса.

    Создадим три класса с двумя методами - один виртуальный, а другой нет. Виртуальный метод переопределён (override) в классах-наследниках. Невиртуальный метод просто скрыт в наследниках новой реализацией (невиртуальные нельзя переопределять).
    class Animal {
        public void Info() { Console.WriteLine("Animal"); }
        public virtual void Say() { Console.WriteLine("Nothing to say"); }
    }
        
    class Cat : Animal {
        public void Info() { Console.WriteLine("Cat"); }
        public override void Say() { Console.WriteLine("Meow"); }
    }
        
    class Dog : Animal {
        public void Info() { Console.WriteLine("Dog"); }
        public override void Say() { Console.WriteLine("Woof"); }
    }

    При создании объекта важно, в переменную какого типа объект будет записан:
    Dog dog1 = new Dog();
    Animal dog2 = new Dog();
    // Не виртуальный метод - вызовется метод класса, указанного у переменной 
    dog1.Info(); // напишет Dog
    dog2.Info(); // напишет Animal
    // Виртуальный метод - вызовется метод класса, которого переменная реально имеет
    dog1.Say(); // напишет Woof
    dog2.Say(); // напишет Woof


    А теперь частая ситуация, когда полиморфизм нужен - при итерации массива:
    Animal[] animals = new Animal[10];
    FillAnimals(animals); // заполним массив вперемешку собаками и кошками
    
    foreach (var animal in animals) animal.Say(); // вызовется правильный метод
    // У невиртуальных методов так сделать нельзя! Полиморфизм в действии

    Наследование без виртуальных методов полезен только фиксацией интерфейса.

    Вот весь код примера: code.re/5ZC
    Вставьте его вот сюда и проверьте.

    P.S. Написал код на C#, чтобы подчеркнуть разницу между виртуальными и невиртуальными методами. В Javascript все методы виртуальные (как и в php, например).

    UPD. (спасибо @Petroveg)
    В языке C# (и других статически типизированных) обычно делают так - если метод в базовом классе записывается для всех потомков и оттуда будут использоваться напрямую, то он помечается обычным, невиртуальным. А если метод предназначен для того, чтобы в наследниках его переопределить, то необходимо его сделать виртуальным, чтобы при вызове метода компилятор выбрал нужную версию метода. То есть некоторые методы лучше делать виртуальными, а некоторые нет.
    И ещё раз - виртуальность важна только в одном случае - если объект-наследник записан в переменную базового класса:
    Animal animal = new Dog();
    В javascript невиртуальных методов не бывает - динамическая основа этого языка ВСЕГДА автоматически вызывает именно последнюю версию метода, определяя конкретную по цепочке прототипов. Поэтому в Javascipt, по большому счёту, сильно думать о полиморфизме смысла нет - это только абстрактная концепция, не влияющая на сам код, а только на архитектуру.
    Ответ написан
    6 комментариев
  • Почему не работают горячие клавиши в Unity3d по Ubuntu?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    Как минимум потому, что официально Linux для юнити идет так, "между делом". Хорошо что вообще работает )
    Кстати, в винде тоже периодически отваливаются хоткеи юнити - так что не нойте )))
    Ответ написан
    Комментировать
  • По вашему опыту - поможет ли от выгорания смена работы?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Мне лично помогают мои личные домашние проекты. Щупаю технологии и языки, которые хочу и мне это помогает от выгорания.
    Когда вообще всё надоедает, я увольняюсь и полгода-год не работаю, а катаюсь по разным странам пока не надоест.
    Ответ написан
    Комментировать
  • Как обосновать повышение зарплаты?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Ищи другую работу с повышенной оплатой. Когда найдёшь - приходи с этим аргументом к руководству за повышением с суммой выше той, что нашёл. Не согласятся - уходи на новое место.
    Самый беспроигрышный вариант. В любом из двух вариантов будешь в выигрыше.
    Ответ написан
    6 комментариев
  • Векторная графика в Unity для 2D игры?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    Экспорт в PNG это нормальная практика, все так делают. Если хочется получить честную векторную графику в юнити, то начиная с 2018.1 существует пакет com.unity.vectorgraphics, здесь можете почитать о нём подробнее. Либо можете воспользоваться плагином.
    Ответ написан
    Комментировать
  • Векторная графика в Unity для 2D игры?

    GavriKos
    @GavriKos Куратор тега Unity
    Некоторым художникам проще работать в векторе - раз. В некоторых случаях вектор легче редактировать (UI, например) - два. Вектор всегда легче перегнать в большее разрешение, чем растр - три. Надо - используйте в юнити сразу вектор (правда нативно вроде бы пока нельзя) - четыре.
    Ответ написан
    Комментировать
  • Где кроется ошибка в коде php?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Пустая строка равна false при нестрогом сравнении.
    Ответ написан
    Комментировать
  • Где кроется ошибка в коде php?

    bitniks
    @bitniks
    Go/PHP/Symfony developer
    Потому что идет проверка на равенство $url и false. А они равны, если учитывать приведение типов, поэтому выполняется первый case. Вы как-то не так используете switch
    Ответ написан
    2 комментария
  • Чем в c# заменяют многомерные ассоциативные массивы?

    @AlexP11223
    У меня в проекте из бд вытаскиваются данные о объекте

    Ну так и создайте класс и объект (можно еще на ORM типа Entity Framework посмотреть), причем тут массив?

    А вообще для ассоциативных массивов можно использовать Dictionary msdn.microsoft.com/en-us/library/xfhwa508%28v=vs.1...
    Ответ написан
    Комментировать
  • Какую книгу по C# выбрать?

    @asArtem
    Никогда не читайте документацию в качестве обучения, как рекомендуют выше. Документация - это справка не более.
    Читать нужно только книги обучающие, иначе зёрна от плевел не отделить и за год даже.
    Ответ написан
    Комментировать
  • Как написать игру для андроид? Какой язык и технологии самые популярные?

    swanrnd
    @swanrnd
    Издатель HTML5 игр
    Unity и Corona
    3D и 2D

    Тут вопрос, что за проект будет в итоге.
    Ответ написан
    Комментировать
  • Какие IDE есть для C# и какой из них лучше?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    если вы под виндой - Visual Studio 2017 Community абсолютно бесплатна, и ни кто с ней рядом не сравняется на сегодняшний день

    под линуксом, скорее всего JetBrains Rider будет самым продвинутыми, но он платный и под линукс и под винду

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

    есть кросплатформенная Visual Studio Code, но она еще слабее, главная ее фишка в легкости написания плагинов поддержки огромного количества языков, которые путных IDE вообще не имеют

    все зависит от цели. если цель C# в Windows - только Visual Studio 2017 (если хотите бесплатно, то повторюсь - Community редакция)
    Ответ написан
    1 комментарий