Результати пошуку
ITVDN: курси програмування
Відеокурси з
програмування

Замовити дзвінок

Вибери свою IT спеціальність

Підписка

Замовити дзвінок

+38 099 757 27 82
Результати пошуку за запитом: видеокурс c
Розробка графічного інтерфейсу на QML

Автор: Руслан Ларіоненко

<p>В вебинаре будут рассмотрены инструменты библиотеки Qt для создания графического интерфейса с использованием декларативного языка для описания графического интерфейса QML. Вы узнаете основные концепции языка QML, а также ознакомитесь со стандартной библиотекой элементов графического интерфейса Qt Quick. Кроме этого, будет рассмотрено взаимодействие интерфейса написанного с использованием языка QML и приложения на языке С++.</p> <p><strong>Программа вебинара:</strong></p> <ol> <li>Что такое QML.</li> <li>Основные концепции QML. <ol> <li>Компоненты.</li> <li>QtObject.</li> <li>Связывания.</li> <li>Подключения.</li> <li>Таймеры.</li> </ol> </li> <li>Стандартная библиотека элементов Qt Quick. <ol> <li>Базовые визуальные элементы.</li> <li>Обработка ввода пользователя.</li> <li>Комплексные визуальные элементы.</li> <li>Анимации.</li> <li>Работа с текстом.</li> <li>Размещение элементов.</li> <li>Стили и темы.</li> </ol> </li> <li>Использование JavaScript в QML.</li> <li>Работа с мультимедиа.</li> <li>Мобильные устройства.</li> <li>Взаимодействие с C++ кодом.</li> <li>Концепция модель-отображение в QML.</li> <li>Практика. <ol> <li>Создание простого видео-проигрывателя.</li> <li>Демонстрация взаимодействия с C++ кодом и использования концепции модель-отображение на примере сетевого приложения для обмена сообщениями.</li> </ol> </li> </ol> <p>&nbsp;</p> <p><strong>Целевая аудитория:</strong></p> <p>Разработчики, которые имеют общие представления о фреймворке Qt и хотят ознакомиться с декларативным языком QML и библиотекой Qt Quick и понять принципы взаимодействия графического интерфейса на QML с Qt приложения на языке С++.</p>
Оператор nameof: Нова функція С# 6.0

Автор: Редакция ITVDN

Введение 12 ноября 2014 в рамках конференции Connect () Microsoft презентовала Visual Studio 2015, которая имеет много новых и интересных возможностей тестирования для разработчиков. Microsoft анонсировала новую версию C# - C# 6.0, улучшенную и обновленную. Одно из нововведений функций C# 6.0 –оператор nameof. Что такое оператор nameof С введением оператора nameof теперь возможно избегать сложно закодированых строчек в коде. Оператор nameof принимает имя элементов кода и возвращает строчный литерал этого элемента. Параметры, которые принимает оператор nameof, включают имя класса и всех его членов, таких как: методы, переменные и константы. Довольно удобно использовать строчные литералы, чтобы бросить ArgumentNullException (назвать аргумент винованым) и вызвать события PropertyChanged (чтоб назвать измененное свойство), но велика вероятность появления ошибки, потому что можно неправильно их записать или не восстановить после рефакторинга. Выражения оператора nameof являются особым видом строчного литерала, где компилятор проверяет, есть ли у Вас что-то с заданным именем и Visual Studio знает, куда он ссылается, поэтому навигация и рефакторинг будут работать легко. Оператор nameof может быть полезным для разных сценариев, таких как INotifyPropertyChanged, ArgumentNullException и отображения. Пример 1 string person;             Console.WriteLine(nameof(person)); // prints person              int x = 2;             Console.WriteLine(nameof(x));     //prints x   Пример 2 class Operatornameof         {             public Operatornameof(string name) //constructor              {                 if (name == null)                     throw new ArgumentNullException(nameof(name)); // use of nameof Operator                 else                     Console.WriteLine("Name: " + name);             }         } Пример 3 class Operatornameof         {             private int _price;             public int price             {                 get                 {                     return this._price;                 }                 set                 {                     this._price = value;                     PropertyChanged(this, new PropertyChangedEventArgs(nameof(this.price)));   //// INotifyPropertyChanged                  }             }             private void PropertyChanged(Operatornameof operatornameof1, PropertyChangedEventArgs propertyChangedEventArgs)             {                 throw new NotImplementedException();             }         } Программа 1 с использованием Visual Studio 2013 using System; using System.Text; namespace CSharpFeatures {     public class operatornameof     {         public operatornameof(string name, string location, string age)         {             if (name == null)                 throw new ArgumentNullException("name");             else                 Console.WriteLine("\n Name: " + name);             if (location == null)                 throw new ArgumentNullException("location");             else                 Console.WriteLine(" Location: " + location);             if (age == null)                 throw new ArgumentNullException("age");             else                 Console.WriteLine(" Age: " + age);         }         static void Main(String[] args)         {             operatornameof p = new operatornameof("Abhishek", "Ghaziabad", "23");             Console.ReadKey();         }     } } Программа 1 с использованием Visual Studio 2015 Preview using System; using System.Text; namespace CSharpFeatures {     public class Operatornameof     {         public Operatornameof(string name, string location, string age)         {             if (name == null)                 throw new ArgumentNullException(nameof(name));             else                 Console.WriteLine("Name: " + name);             if (location == null)                 throw new ArgumentNullException(nameof(location));             else                 Console.WriteLine("Location: " + location);             if (age == null)                 throw new ArgumentNullException(nameof(age));             else                 Console.WriteLine("Age: " + age);         }         static void Main(String[] args)         {             Operatornameof p = new Operatornameof("Abhishek", "Ghaziabad", "23");             Console.Read();         }     } }   Программа 2 с использованием Visual Studio 2013 using System; namespace CSharpFeatures {     class Operatornameof1     {         static void Main(string[] args)         {             details d = new details();             d.Age = 23;             d.Name = "Abhishek";             Console.WriteLine("\n Name: {0} ", d.Name);             Console.WriteLine(" Age: {0} ", d.Age);             Console.ReadKey();         }     }     class details     {         private string _Name;         public int _Age;         public string Name         {             get { return this._Name; }             set { this._Name = value; }         }         public int Age         {             get { return this._Age; }             set { this._Age = value; }         }     } } Программа 3 с использованием Visual Studio 2015 Preview using System; namespace CSharpFeatures {     class Operatornameof2     {         static void Main(string[] args)         {             details d = new details();             Console.WriteLine("{0} : {1}", nameof(details.Name), d.Name);             Console.WriteLine("{0} : {1}", nameof(details.Age), d.Age);             Console.ReadKey();         }     }     class details     {         public string Name { get; set; } = "Abhishek";         public int Age { get; set; } = 23;     } } Из данной статьи Вы узнали, как использовать оператор nameof, чтобы избежать использования сложно закодированых строчек в коде. Надеемся, что Вам понравилась новая функция C# 6.0, введенная Microsoft. Источник: http://www.c-sharpcorner.com/UploadFile/16101a/nameof-operator-a-new-feature-of-C-Sharp-6-0/
Виграй знижку 50% на онлайн навчання з ментором

Автор: Редакция ITVDN

Друзі, 1 лютого ми проведемо розіграш знижок 50% на онлайн навчання у групі з ментором за найпопулярнішими ІТ-спеціальностями! Буде 6 переможців – по одному на кожен напрямок. Шестеро щасливчиків зможуть пройти повне навчання за обраною спеціальністю за половину вартості і заощадити від 261 до 483 USD в залежності від обраної спеціальності! Ви можете виграти знижку на навчання: Python Developer FrontEnd Developer C#/.NET Developer Java Developer FullStack Node.js Developer Manual QA. Тестування ПЗ Як проходить навчання Онлайн заняття проводяться в Zoom тричі на тиждень у невеличкій групі (до 25 осіб) з сертифікованим ментором та його помічником, спілкування у телеграм чаті. Заняття триває 2 години. Є перевірка домашніх завдань і рекомендації ментора, курсові проєкти і допомога у працевлаштуванні. Додаткові бонуси: ключі на професійний софт для розробників від JetBrains; всі уроки записуються і лишаються з вами назавжди; безкоштовний доступ до всіх відео курсів ITVDN за обраною спеціальністю на весь термін навчання; онлайн тестування, сертифікати по окремим технологіям та Диплом по спеціальності; можливість стажування після закінчення навчання. Це чудова можливість зробити старт в ІТ і отримати роботу в 2024 році з максимальною вигодою. Щоб взяти участь у розіграші, треба: Підписатися на наш Telegram-канал. Підписатися на YouTube-канал CodeUA. Заповнити форму учасника розіграшу. Заявки приймаються до 12:00 1 лютого. Розіграш відбудеться 1 лютого о 16:00 на YouTube-каналі CodeUA. Переможці будуть визначені за допомогою онлайн-сервісу Random.org. Посилання на онлайн трансляцію ми надішлемо вам на email, вказаний у реєстраційній формі. Знижка на навчання дійсна протягом 2 місяців – у лютому та березні. Нижче – детальніше про кожну спеціальність. Python Developer Тривалість навчання – 5 місяців (110 годин із тренером). Ви вивчите: мову Python з нуля до поглибленого рівня, систему управління версіями Git, СУБД PostgreSQL та фреймворк Django. Додатково ви отримаєте доступ до 24 відео курсів за спеціальністю Python Developer на ITVDN на 6 місяців, а також ключі на професійний софт від JetBrains. Курсові проєкти та допомога в працевлаштуванні. Повна вартість навчання – 715 USD. Акційна вартість для переможця – 358 USD (🔥 ви економите 357 USD) Детальніше про курс FrontEnd Developer Тривалість навчання — 5.5 місяців (124 години з тренером). Ви вивчите: мови HTML, CSS і JavaScript, систему управління версіями Git, один із фреймворків на вибір – Angular (+ мова TypeScript) або React. Додатково ви отримаєте доступ до 51 відео курсу за спеціальністю FrontEnd Developer на ITVDN на 7 місяців, а також ключі на професійний софт від JetBrains. Курсові проєкти та допомогу в працевлаштуванні. Повна вартість навчання – 820 USD. Акційна вартість для переможця – 410 USD (🔥 ви економите 410 USD) Детальніше про курс C#/.NET Developer Тривалість навчання – 5.5 місяців (138 годин із тренером). Ви вивчите: мову C# з нуля до поглибленого рівня, систему управління версіями Git, мову запитів SQL, Entity Framework Core, ASP.NET Core. Ви отримаєте доступ до 57 відео курсів за спеціальністю C#/.NET Developer на ITVDN на 8 місяців. Курсові проєкти та допомогу в працевлаштуванні. Повна вартість навчання – 840 USD. Акційна вартість для переможця – 420 USD (🔥 ви економите 420 USD) Детальніше про курс Java Developer Тривалість навчання – 5 місяців (124 години з тренером). Ви вивчите: мову Java з нуля до поглибленого рівня, систему управління версіями Git, СУБД MySQL, технології JDBC & Hibernate, Web-services, основи фреймворку Spring. Додатково ви отримаєте доступ до 34 відео курсів за спеціальністю Java Developer на ITVDN на 7 місяців, а також ключі на професійний софт від JetBrains. Курсові проєкти та допомогу в працевлаштуванні. Повна вартість навчання – 781 USD. Акційна вартість для переможця – 391 USD (🔥 ви економите 390 USD) Детальніше про курс FullStack Node.js Developer Тривалість навчання – 7 місяців (146 годин із тренером). Ви вивчите: мови верстання HTML & CSS, мову програмування JavaScript, систему управління версіями Git, фреймворк React, СУБД MySQL, фреймворк Node.js. Додатково ви отримаєте доступ до 13 відео курсів від ITVDN, а також ключі на професійний софт від JetBrains. Курсові проєкти та допомогу в працевлаштуванні. Повна вартість навчання – 966 USD. Акційна вартість для переможця – 483 USD (🔥 ви економите 483 USD) Детальніше про курс QA. Тестування ПЗ Тривалість навчання – 3 місяці (78 годин із тренером). Ви вивчите основи проєкту в ІТ, мануальне тестування, бази даних та SQL, а також отримаєте знання з HTML & CSS, Git, CI/CD/CD, mobile, веб та API тестування. Ви отримаєте доступ до 33 відео курсів за спеціальністю Quality Assurance на ITVDN на 8 місяців. Допомогу HR-фахівця у працевлаштуванні. Повна вартість навчання – 523 USD. Акційна вартість для переможця – 262 USD (🔥 ви економите 261 USD) Детальніше про курс   UPD від 01.02.2024 Переможці: Python Developer - Корчевний Петро Frontend Developer - Кучер Анастасія  Java Developer - Степанов Артем C#/.NET Developer - Тимощук Марина FullStack Node.js Developer - Кирилаш Сергій Manual QA. Тестування ПЗ - Клименко Ірина Запис розіграшу: https://www.youtube.com/watch?v=fK6xxHcop1k
IT професія за половину вартості! Розіграш знижок на навчання Python, FrontEnd, Full Stack, .NET, Java, QA Manual

Автор: Редакция ITVDN

Друзі, якщо ви бажаєте пройти навчання за певною ІТ-спеціальністю і вірите в свою удачу, скоріш реєструйтеся на перший великий розіграш з LiveOnline навчання від ITVDN! Що таке LiveOnline Це найбільш ефективний формат навчання! Онлайн уроки тричі на тиждень у Zoom, домашні завдання з перевіркою, курсові проєкти, багато спілкування з ментором, асистентом ментора і одногрупниками. Додатково ви отримуєте записи усіх уроків і добірку відео курсів від ITVDN, сертифікати і персональну допомогу у працевлаштуванні. 24 жовтня ви можете виграти знижку 50% на навчання. Це дозволить вам зробити старт в ІТ і отримати свій перший job-офер у 2024 році з максимальною вигодою. Знижки будуть на такі курси: FrontEnd Developer Python Developer C#/.NET Developer Java Developer FullStack Node.js Developer Manual QA. Тестування ПЗ Буде 12 переможців – по два у кожному з напрямків. Ці 12 осіб зможуть пройти повне навчання за обраною спеціальністю за половину вартості. Переможці зможуть заощадити від 261 до 483 USD в залежності від обраної спеціальності! Як взяти участь у розіграші? Щоб стати учасником розіграшу, необхідно заповнити реєстраційну форму. Заявки приймаються до 12:00 24 жовтня. Розіграш відбудеться 24 жовтня о 16:00 на YouTube-каналі CodeUA. У виборі переможця нам допоможе онлайн-сервіс Random.org. Посилання на онлайн трансляцію ми надішлемо вам на email, вказаний у реєстраційній формі. Знижка на навчання дійсна у жовтні, листопаді та грудні. Обирайте курс і реєструйтеся! FrontEnd Developer Тривалість навчання — 5 місяців (124 години з тренером) Ви вивчите: мови HTML, CSS і JavaScript, систему управління версіями Git, один з фреймворків на вибір – Angular (+ мова TypeScript) або React. Додатково ви отримаєте доступ до 52 відео курсів за спеціальністю FrontEnd Developer на ITVDN на 7 місяців, а також ключі на професійний софт від JetBrains. Курсові проєкти та допомогу в працевлаштуванні. Переможці зможуть заощадити 410 USD. Python Developer Тривалість навчання – 5 місяців (110 годин із тренером). Ви вивчите: мову Python з нуля до поглибленого рівня, систему управління версіями Git, СУБД PostgreSQL та фреймворк Django. Додатково ви отримаєте доступ до 24 відео курсів за спеціальністю Python Developer на ITVDN на 6 місяців, а також ключі на професійний софт від JetBrains. Курсові проєкти та допомогу в працевлаштуванні. Переможці зможуть заощадити 357 USD. Java Developer Тривалість навчання – 5 місяців (128 годин із тренером). Ви вивчите: мову Java з нуля до поглибленого рівня, систему управління версіями Git, СУБД MySQL, технології JDBC & Hibernate, Web-services, основи фреймворку Spring. Додатково ви отримаєте доступ до 32 відео курсів за спеціальністю Java Developer на ITVDN на 7 місяців, а також ключі на професійний софт від JetBrains. Курсові проєкти та допомогу в працевлаштуванні. Переможці зможуть заощадити 390 USD. FullStack Node.js Developer Тривалість навчання – 6 місяців (146 годин із тренером). Ви вивчите: мови верстання HTML & CSS, мову програмування JavaScript, систему управління версіями Git, фреймворк React, СУБД MySQL, фреймворк Node.js. Додатково ви отримаєте доступ до 13 відео курсів від ITVDN, а також ключі на професійний софт від JetBrains. Курсові проєкти та допомогу в працевлаштуванні. Переможці зможуть заощадити 483 USD. C#/.NET Developer Тривалість навчання – 5.5 місяців (138 годин із тренером). Ви вивчите: мову C# з нуля до поглибленого рівня, систему управління версіями Git, мову запитів SQL, Entity Framework Core, ASP.NET Core. Ви отримаєте доступ до 57 відео курсів за спеціальністю C#/.NET Developer на ITVDN на 8 місяців. Курсові проєкти та допомогу в працевлаштуванні. Переможці зможуть заощадити 420 USD. QA. Тестування ПЗ Тривалість навчання – 3 місяці (78 годин із тренером). Ви вивчите основи проєкту в ІТ, мануальне тестування, бази даних та SQL, а також отримаєте знання з HTML & CSS, Git, CI/CD/CD, mobile, веб та API тестування. Ви отримаєте доступ до 33 відео курсів за спеціальністю Quality Assurance на ITVDN на 8 місяців. Допомогу HR-фахівця у працевлаштуванні Переможці зможуть заощадити 261 USD. UPD: Переможці розіграшу: Python Developer Великов Олег Арещенко Дмитро Frontend Developer Назаренко Олеся Шинкаренко Ольга Manual QA. Тестування ПЗ Нікітюк Людмила Павлюк Анна FullStack Node.js Developer Білоус Дмитро Stepaniuk Dmytro Java Developer  Хомич Катерина Periazev Dmitrii  C#/.NET Developer Бугрій Олег Денисенко Євген Запис розіграшу: https://www.youtube.com/watch?v=zIb8V8i2vyY
ASP.NET Core vs Node.JS

Автор: Guillaume Jacquart

Я работал с .NET-платформой на протяжении 5 лет – как в плане профессиональной необходимости в качестве бек-енд разработчика и архитектора, так и в плане определенных личных задач - таких как открытые и закрытые сторонние проекты. После нескольких лет работы с экосистемой PHP и имея солидный стаж в плане Java, я пришел к выводу, что язык C# для меня представляет, пожалуй, наибольший интерес – благодаря своему удобству и эффективности. Этот язык комплексный, тщательно продуманный и лично для меня в работе с C# лучшую среду программирования, нежели Visual Studio, человечество еще не изобрело. Более того, ASP.NET уже содержит в себе все, что необходимо веб-разработчику, не требуя установки дополнительных фрейморков и библиотек. Единственное, что меня не очень устраивало в плане .NET-системы, это ее «закрытость» и использование преимущественно Microsoft-платформы (хотя и существуют специальные Mono, которые позволяют в качестве альтернативы запускать шарп-проекты и под Linux, но достигается это ценой утраты целого ряда полезных фичей). По этой причине я обратил свое внимание на Node.JS, хотя мои коллеги называли JavaScript бесполезным языком, а Node.JS – хламом. Я был очарован однопоточной каллбэк-системой, я наслаждался, создавая REST API, используя ExpressJS. Но затем Microsoft выпустила кроссплатформенную технологию ASP.NET Core, и я призадумался, что же и когда стоит использовать. После чего я решил собрать как можно больше информации касательно возможностей и реализации тех или иных фичей двух технологий, после чего выбрал для себя, по моему мнению, наиболее удобную технологию, в рамках которой и развернул свой новый проект. Надеюсь, эта публикация вам тоже поможет прийти к определенному решению. Модель обработки запроса Node.JS Node.JS успел зарекомендовать себя как однопоточный обработчик запросов. Что это значит? Это значит, что вместо обработки каждого поступившего http-запроса внутри отдельного потока или процесса (наподобие Apache), обработка производится внутри одного потока. Подобный подход делает обработку запросов однопоточной, тогда как в Apachi\PHP обработка является многопоточной. Однако, что касательно Node.JS, здесь преимущество заключается в асинхронной работе системного ввода-вывода, которое, соответственно, не блокирует требуемый поток. Операция ввода\вывода производится в рамках отдельного потока, в то время как основной продолжает свою работу. Как только вторичный поток завершает свою работу, вызывается callback, который, соответственно, передает в контекст основного потока результат. С одной стороны, использование подобного подхода прекрасно подходит для приложений, интенсивно работающих с вводом\выводом. С другой стороны, появляется вероятность так называемого «ада обратных вызовов», который провялятся в цикличной сложности кода. Будем надеяться, что новая версия введёт в обиход полноценные async\await. Однопоточная модель обработки запросов Node.JS может быть сгруппирована при помощи использования нативной кластеризации, Nginx или PM2. ASP.NET (синхронный) Исторически так сложилось, что обработка запросов ASP.NET MVC (или Web Api) производится подобно Apache / PHP: каждый запрос обрабатывается внутри своего собственного потока пула потоков. И каждая команда ввода-вывода производится синхронно внутри каждого из потоков. В контексте жесткой работы с вводом-выводом подобный подход, конечно, менее удобный, если сравнивать со схемой Node.JS. Хвала Небесам, .NET Framework 4.5 вводит в C# async\await, что также исправляет сложившуюся ситуацию. ASP.NET Core (асинхронный) Паттерн async\await позволяет в полной мере ощутить все прелести асинхронного программирования. Действительно, теперь появилась возможность указать каждый обработчик запросов как асинхронный, благодаря чему работа с системой ввода-вывода будет производиться в контексте своего потока. Это позволит не блокировать основной поток. Подобная модель на базе Task`ов позволяет использовать обратные вызовы, ощутить все прелести асинхронности и прочее. .NET Core часто применяет паттерн async\await при интенсивной работе с системой ввода-вывода.   Async\await Node.JS VS Async\await ASP.NET Core Пример кода Node.JS для асинхронного запроса в базу данных: Пример того же кода на ASP.NET Core (фрагмент класса Startup):   Разница между двумя моделями в том, что ASP.NET Core способен обрабатывать большее количество запросов благодаря своей дефолтной параллельности. В то же время переключение между асинхронными потоками может занимать время в случае использования большого количества общих для многих потоков переменных. В такой ситуации все же Node.JS будет быстрее.   Много современных языков программирования, вроде того же C#, реализуют асинхронный ввод-вывод, который часто недооценен сообществом Node.JS-разработчиков, но который может приводить к приятным неожиданностям. В этом случае Node.JS в значительно меньшей мере технологичный, если сравнивать его с ASP.NET Core. Язык программирования Особенности и безопасность Вращаться в среде C#-разработчиков – значит выслушать множество критики в адрес динамической типизации и удивительных булевых преобразований JavaScript. Впрочем, эта критика является обоснованной, если учитывать, что JavaScript был разработан всего за 10 дней для динамического контента HTML.   С другой стороны, с того времени язык очень даже «вырос», и новая спецификация привносит такие фичи, как: Классы Новые идентификаторы (const, let), повышающие надежность кода Указательные функции Интерполяцию строк Генераторы Элементы рефлексии Впрочем, C# все равно остается намного более мощным языком программирования, ибо все вышеперечисленное – всего лишь небольшая часть того, чем может похвастаться строго-типизированный объектно-ориентированный язык программирования. Мне кажется, что для C# лучшей среды работы, нежели Visual Studio, просто не найти. Однако, если учитывать рост спроса на рынок микросервисов, большинство из особенностей подобных гигантов здесь не найдут свое применение. Изучение Если вы раньше работали с классической MVC-архитектурой, переход на Node.JS \ Express затребует некоторое время, чтобы привыкнуть. Некоторые же вещи могут вообще оказаться в новинку. Также нужно будет время для того, чтобы «переварить» событийно-ориентированную парадигму Node.JS. Что действительно может показаться запутанным впервые при работе со средними или большими приложениями, так это паттерны рефакторинга кода и, собственно говоря, архитектура кода. Так как функциональность Express.js очень гибкая, выбор «правильной» архитектуры и файловой структуры может быть затруднительным. С другой стороны, для создания качественного приложения без этого – никак. Что же касается ASP.NET (Core) MVC / WebApi, то тут уже предоставляется готовая файловая структура. Да, разработчик может применить немного «креативности» при создании бизнес-логики и слоя для работы с базой, но предопределенность архитектуры упрощает разработку. Однако, в случае с маленькими приложениями, JS-платформа более предпочтительна, так как позволяет написать сайт-визитку с использованием одного лишь js-файла и одного лишь package.json. Продуктивность Я обнаружил, что написание простого кода является более быстрым при использовании Node.JS. Причина в том, что простые приложения тут проявляют большую «гибкость». Также возникают вопросы касательно типизации языка, так как в некоторых случаях оказывается, что динамическая типизация является скорее плюсом, чем минусом. С другой стороны, я заметил, что при написании объемного кода, более читабельным он оказывается при работе с C#, чем с JavaScript. Думаю, причина этому – строгие ооп-парадигмы. Что касается отладки и юнит-тестирования, тут C# / Visual Studio также показывают лучшую продуктивность, хотя и сказать, что JavaScript совместно с Visual Studio Code пасет задних, нельзя. Время построения маленьких js-приложений также меньше. Екосистема В этом плане две технологии отличаются больше всего. Node.JS обязана своим развитием в основном сообществу, которое и разработало для неё большее количество существующих популярных библиотек. С одной стороны, вы чувствуете себя очень свободно в выборе модулей для разработки. С другой же, внезапное обновление одного из пакетов, отсутствие надлежащей проверки на ошибки и стабильность, в некоторых случаях могут легко привести к обвалу всего приложения. ASP.NET Core технология разработана проверенной командой профессионалов из Microsoft. И она предоставляет абсолютно все, что необходимо разработчику веб-приложений любых направлений. Кроме того, сторонние библиотеки также качественно выполнены и разработаны другими крупными проверенными компаниями. Один из многочисленных примеров – ORM-инструменты. Entity Framework, официальный инструментарий для работы с базой данных, предоставляет абсолютно все, что необходимо разработчику. Публикация и запуск А вот это та область, где Node.JS, без сомнения, лидирует. Технология является открытой, кросс-платформенной, поддерживает докеризацию. Это значит, что вы запросто сможете запустить свое приложение под такими платформами: На собственном Linux, Windows или Mac-сервере. Все, что для этого нужно – это движок Node.JS и реверсивный прокси-сервер (наиболее популярный – Nginx). Докер-контейнер. Большинство PaaS-провайдеров (AWS, Google App Engine, Azure, Heroku, …) Сервис Now, который позволяет провести запуск Node.JS-приложения в одну строчку без предварительной конфигурации. Также есть много подходящих CI & CD – платформ. Что же в случае ASP.NET-стека, тут все обстоит несколько печальнее. Хотя и ASP.NET Core также кросс-платформенная, количество сервисов для публикации несоизмеримо меньшее. Вот какие хостинги я знаю на данный момент: Собственный Windows-сервер с классическим IIS. Собственный Linux-сервер с реверсивным прокси. Докер-контейнер под Windows. Работает отлично, но занимает много места. Некоторые облачные сервисы PaaS. В основном, Azure, но есть также некоторые неофициальные билды Heroku. Заключение Node.JS обладает асинхронной событийно-ориентированной моделью обработки запросов, которая не очень то и уступает многопоточной async\await модели ASP.NET. Производительность Node.JS – приложений не всегда лучше, чем ASP.NET Core. Можно сказать, она даже хуже. Язык JavaScript не так уж и плох (и становится лучше!). А использование его вместе с Node.JS может дать приятный результат. ASP.NET (Core) лучше всего подходит для объемных приложений и предоставляет все необходимые разработчику инструменты высшего качества. Для микро- или среднеразмерных сервисов Node.JS предоставляет широкие возможности в плане публикации. И, как всегда, не существует одного лучшего инструмента «на все случаи жизни». Попробуйте доступные и подберите для себя тот, который лучше всего отвечает вашим требованиям. Автор перевода: Евгений Лукашук Источник
Реалізація успадкування перерахувань за допомогою розширення для Visual Studio, що базується на Roslyn

Автор: Редакция ITVDN

Введение В С# программировании необходима возможность расширять простое уравнение. Например, когда нужно использовать перечисления из библиотеки dll, которые невозможно изменить в коде, но и в то же время нужно использовать дополнительные значения, которых нет в библиотеке. Решить проблему можно при помощи системы Roslyn, основанной на расширении VS для создания отдельных файлов. Данный подход похож на моделирование множественного наследования в шаблоне "Implementing Adapter Pattern" и "Imitating Multiple Inheritance" в C# с использованием системы Roslyn, основанной на VS Extension Wrapper Generator. Формулировка проблематики Обратите внимание на схему EnumDerivationSample. Она содержит негенерированный код, большая часть которого будет сгенерирована позже. Схема содержит тип перечисления BaseEnum: public enum BaseEnum {        A,        B } Также в ней присутствует тип перечисления DerivedEnum  public enum DerivedEnum {        A,        B,        C,        D,        E } В перечислении DerivedEnum перечень значений А и В такие же, как в перечислении BaseEnum. Файл DerivedEnum.cs также содержит статический класс DeriveEnumExtensions для конвертации BaseEnum в DerivedEnum и наоборот: public static class DeriveEnumExtensions {        public static BaseEnum ToBaseEnum(this DerivedEnum derivedEnum)        {              int intDerivedVal = (int)derivedEnum;              string derivedEnumTypeName = typeof(DerivedEnum).Name;              string baseEnumTypeName = typeof(BaseEnum).Name;              if (intDerivedVal > 1)              {                     throw new Exception                            (                            "Cannot convert " + derivedEnumTypeName + "." +                            derivedEnum + " value to " + baseEnumTypeName +                            " type, since its integer value " +                            intDerivedVal + " is greater than the max value 1 of " +                            baseEnumTypeName + " enumeration."                            );              }              BaseEnum baseEnum = (BaseEnum)intDerivedVal;              return baseEnum;        }        public static DerivedEnum ToDerivedEnum(this BaseEnum baseEnum)        {              int intBaseVal = (int)baseEnum;              DerivedEnum derivedEnum = (DerivedEnum)intBaseVal;              return derivedEnum;        } } Преобразование значений BaseEnum в DerivedEnum всегда проходит успешно, в то время как преобразование в обратном направлении может быть проблематичным. Например, если значение DerivedEnum больше 1 (значение BaseEnum.B – наибольшее значение в типе перечисления BaseEnum). Функция Program .Main (...) используется для тестирования функциональных характеристик: static void Main(string[] args) {        DerivedEnum derivedEnumConvertedValue = BaseEnum.A.ToDerivedEnum();        Console.WriteLine("Derived converted value is " + derivedEnumConvertedValue);        BaseEnum baseEnumConvertedValue = DerivedEnum.B.ToBaseEnum();        Console.WriteLine("Derived converted value is " + baseEnumConvertedValue);            DerivedEnum.C.ToBaseEnum(); } Будет выводиться: Derived converted value is A Base converted value is B И тогда появится такое сообщение: "Cannot convert DerivedEnum.C value to BaseEnum type, since its integer value 2 is greater than the max value 1 of BaseEnum enumeration." Использование Visual Studio Extension для формирования наследования перечислений. Установите расширение NP.DeriveEnum.vsix Visual Studio из папки VSIX, дважды кликнув на файл. Откройте схему EnumDerivationWithCodeGenerationTest. Тип ее перечислений такой же, как и в предыдущей схеме: public enum BaseEnum {        A,        B } Посмотрите на файл "DerivedEnum.cs": [DeriveEnum(typeof(BaseEnum), "DerivedEnum")] enum _DerivedEnum {        C,        D,        E } Он определяет такой тип перечисления _DerivedEnum с атрибутом: [DeriveEnum (TypeOf (BaseEnum), "DerivedEnum")]. Атрибут определяет "супер-перечисления" (BaseEnum) и названия производного перечисления ("DerivedEnum»). Обратите внимание, что поскольку частичные перечисления не поддерживаются в C#, нам придется создать новый тип перечисления, объединив значение от "супер" до "суб" перечислений. Посмотрите характеристики файла DerivedEnum.cs, его "специальные инструменты (Custom Tool)" уже содержатся в "DeriveEnumGenerator": Теперь откройте файл DerivedEnum.cs в Visual Studio, попробуйте изменить его (скажем, добавив пробел) и сохраните его. Вы увидите, что сразу будет создан файл DerivedEnum.extension.cs: Этот файл содержит тип перечисления DerivedEnum, который объединяет все поля перечислений BaseEnum и _DerivedEnum. Для начала убедитесь, что они имеют одинаковое имя и полное значение, а также имеют соответствующие поля в исходных перечислениях: public enum DerivedEnum {        A,        B,        C,        D,        E, } Расширение VS также формирует статический класс DerivedEnumExtensions, содержащий методы преобразования между суб и супер перечислениями: static public class DerivedEnumExtensions {        public static BaseEnum ToBaseEnum(this DerivedEnum fromEnum)        {              int val = ((int)(fromEnum));              string exceptionMessage = "Cannot convert DerivedEnum.{0} value to BaseEnum - there is no matching value";              if ((val > 1))              {                     throw new System.Exception(string.Format(exceptionMessage, fromEnum));              }              BaseEnum result = ((BaseEnum)(val));              return result;        }        public static DerivedEnum ToDerivedEnum(this BaseEnum fromEnum)        {              int val = ((int)(fromEnum));              DerivedEnum result = ((DerivedEnum)(val));              return result;        } } Если использовать метод Program.Main (...), как и в предыдущем образце, получим достаточно похожий результат: static void Main(string[] args) {        DerivedEnum derivedEnumConvertedValue = BaseEnum.A.ToDerivedEnum();        Console.WriteLine("Derived converted value is " + derivedEnumConvertedValue);        BaseEnum baseEnumConvertedValue = DerivedEnum.B.ToBaseEnum();        Console.WriteLine("Base converted value is " + baseEnumConvertedValue);        DerivedEnum.C.ToBaseEnum(); } Вы можете указать значение поля как в суб, так и в супер перечислениях. Генератор кода достаточно развит для того, чтобы выдавать правильный код. Например, если мы поставим значение BaseEnum.B 20: public enum BaseEnum {        A,        B = 20 } И _DerivedEnum.C – 22: enum _DerivedEnum {        C = 22,        D,        E } Получим такой генерируемый код: public enum DerivedEnum {        A,        B = 20,        C = 22,        D,        E, } Метод расширения ToBaseEnum(...) также будет обновляться так, чтобы показывать исключение только тогда, когда мы пытаемся увеличить целое значение области DerivedEnum до 20: public static BaseEnum ToBaseEnum(this DerivedEnum fromEnum) {        int val = ((int)(fromEnum));        string exceptionMessage = "Cannot convert DerivedEnum.{0} value to BaseEnum - there is no matching value";        if ((val > 20))        {              throw new System.Exception(string.Format(exceptionMessage, fromEnum));        }        BaseEnum result = ((BaseEnum)(val));        return result; } Обратите внимание, что изменив значение первого поля суб-перечисления на меньшее или равное последнему полю супер-перечисления, генерация кода не осуществится, и это состояние будет отображаться, как ошибка. Например, попробуйте изменить значение _DerivedEnum.C на 20 и сохранить изменения. Файл DerivedEnum.extension.cs  будет отображаться в списке ошибок. Примечания о введении генератора объектного кода. Код ввода кода генерирования содержится в схеме NP.DeriveEnum. Основная схема NP.DeriveEnum была создана с помощью шаблона "Visual Studio Package" (также, как это было сделано при Implementing Adapter Pattern и Imitating Multiple Inheritance в C# с использованием системы Roslyn, основанной на VS Extension Wrapper Generator). Нам пришлось добавить пакеты Roslyn и MEF2, чтобы использовать функции Roslyn при таких командах, как "Nu Get Package Manager Console": Install - Package Microsoft.CodeAnalysis - Pre Install - Package Microsoft.Composition Класс main генератора называется DeriveEnumGenerator. Он вводит интерфейс IVsSingleFileGenerator. У интерфейса есть два метода - DefaultExtension(...) и Generate(...). Метод DefaultExtension(...) позволяет разработчику указать расширение генерируемого файла: public int DefaultExtension(out string pbstrDefaultExtension) {        pbstrDefaultExtension = ".extension.cs";        return VSConstants.S_OK; } Метод Generate(...) позволяет разработчику указать код, который входит в состав созданного файла:  public int Generate ( string wszInputFilePath, string bstrInputFileContents, string wszDefaultNamespace, IntPtr[] rgbOutputFileContents, out uint pcbOutput, IVsGeneratorProgress pGenerateProgress ) {        byte[] codeBytes = null;        try        {               codeBytes = GenerateCodeBytes(wszInputFilePath, bstrInputFileContents, wszDefaultNamespace);        }        catch (Exception e)        {              pGenerateProgress.GeneratorError(0, 0, e.Message, 0, 0);              pcbOutput = 0;              return VSConstants.E_FAIL;        }        int outputLength = codeBytes.Length;        rgbOutputFileContents[0] = Marshal.AllocCoTaskMem(outputLength);        Marshal.Copy(codeBytes, 0, rgbOutputFileContents[0], outputLength);        pcbOutput = (uint)outputLength;        return VSConstants.S_OK; } В данном случае генерация кода получена за счет метода GenerateCodeBytes (...).  protected byte[] GenerateCodeBytes(string filePath, string inputFileContent, string namespaceName) {        string generatedCode = "";        DocumentId docId =              TheWorkspace              .CurrentSolution              .GetDocumentIdsWithFilePath(filePath).FirstOrDefault();        if (docId == null)              goto returnLabel;        Project project = TheWorkspace.CurrentSolution.GetProject(docId.ProjectId);        if (project == null)              goto returnLabel;        Compilation compilation = project.GetCompilationAsync().Result;        if (compilation == null)              goto returnLabel;        Document doc = project.GetDocument(docId);        if (doc == null)              goto returnLabel;        SyntaxTree docSyntaxTree = doc.GetSyntaxTreeAsync().Result;        if (docSyntaxTree == null)              goto returnLabel;        SemanticModel semanticModel = compilation.GetSemanticModel(docSyntaxTree);        if (semanticModel == null)              goto returnLabel;        EnumDeclarationSyntax enumNode =              docSyntaxTree.GetRoot()              .DescendantNodes()              .Where((node) = > (node.CSharpKind() == SyntaxKind.EnumDeclaration)).FirstOrDefault() as EnumDeclarationSyntax;        if (enumNode == null)              goto returnLabel;        INamedTypeSymbol enumSymbol = semanticModel.GetDeclaredSymbol(enumNode) as INamedTypeSymbol;        if (enumSymbol == null)              goto returnLabel;        generatedCode = enumSymbol.CreateEnumExtensionCode(); returnLabel:        byte[] bytes = Encoding.UTF8.GetBytes(generatedCode);        return bytes; } Метод Generate (...) имеет доступ к C # в качестве одного из параметров. Мы используем такой способ, чтобы получить Id документа в системе Roslyn: DocumentId docId = TheWorkspace .CurrentSolution .GetDocumentIdsWithFilePath(filePath).FirstOrDefault(); Из документа Id можно получить идентификатор схемы, используя dockId. Из схемы Id получаем Roslyn Project от Rosly Workspace: Project project = TheWorkspace.CurrentSolution.GetProject(docId.ProjectId); Из Project получаем следующее: Compilation compilation = project.GetCompilationAsync().Result; Также получаем Roslyn Document: Document doc = project.GetDocument(docId); С данного документа получаем Roslyn SyntaxTree: SyntaxTree docSyntaxTree = doc.GetSyntaxTreeAsync().Result; С компиляции Roslyn и SyntaxTree образовывается семантическая модель: SemanticModel semanticModel = compilation.GetSemanticModel(docSyntaxTree); Вы также получите синтаксис перечисления в файле SyntaxTree: EnumDeclarationSyntax enumNode = docSyntaxTree.GetRoot() .DescendantNodes() .Where((node) = > (node.CSharpKind() == SyntaxKind.EnumDeclaration)).FirstOrDefault() as EnumDeclarationSyntax; Наконец, из SemanticModel и EnumerationDeclarationSyntax Вы можете вытянуть INamedTypeSymbol, соответствующий перечислению: INamedTypeSymbol enumSymbol = semanticModel.GetDeclaredSymbol(enumNode) as INamedTypeSymbol; INamedTypeSymbol очень похож на System.Reflection.Type. Практически всю информацию про тип С# можно получить от объекта INamedTypeSymbol. Метод расширения DOMCodeGenerator. CreateEnumExtensionCode() генерирует и возвращает весь код. generatedCode = enumSymbol.CreateEnumExtensionCode(); Другая часть кода, отвечающая за код генерации, входит в состав NP.DOMGenerator. Система Roslyn используется только для анализа, для генерации кода используется CodeDOM, так как он меньше по объему и удобнее. Есть два основных статических класса в программе NP.DOMGenerator: RoslynExtensions - для анализа Roslyn и DOMCodeGenerator - для генерирования кода, используя функции CodeDOM. Источник: http://www.codeproject.com/Articles/879129/Implementing-Enumeration-Inheritance-using-Roslyn
Розробка ігор на Unreal engine 4

Автор: Дмитро Бобровніков

Приветствую, меня зовут Бобровников Дмитрий, я занимаюсь программированием уже более 4-х лет, из которых первые 2 года учил объектно-ориентированный язык программирования C#, а сейчас занимаюсь разработкой игр на Unreal engine 4. Когда я начинал программировать на движке Unreal engine 4, в то время не было толковой информации по программированию на этом движке, приходилось сталкиваться с определенными трудностями, точнее нехваткой информации, чтобы в дальнейшем нормально работать с этим движком. Конечно, сейчас ситуация стала меняться и уже есть русскоязычные уроки и документация, но особой пользой и информативностью они не отличаются. Также прямо сейчас я работаю над большим “Survive” проектом, пишу всю пользовательскую логику, все изображения взяты именно с этого проекта, подробно вы можете увидеть уроки и процесс создания этого проекта, с какими трудностями я сталкиваюсь и как их решаю на моем youtube канале. https://www.youtube.com/channel/UCZSMGDBh87VmNv0apC6VcCQ И сегодня мы с тобой познакомимся с созданием игр на Unreal engine 4. Кто из нас не мечтал о создании собственной игры! Создание игр - это сложный и трудоёмкий процесс, давай поговорим об этом. Весь процесс создания игры, после выбора движка, начинается с идеи “концепта игр”, то есть сначала полностью на бумаге придумывается игра, после этого ты расписываешь все по пунктам, что нужно будет сделать в игре (от того, что нужно создать меню игры и уровень для него, создать персонажа и т.д.) как можно более широко, для того чтобы у тебя было полное представления о том, что ты будешь писать и какая игра в итоге у тебя получится,  после тебе нужно определиться, какой язык программирования ты будешь использовать. Unreal engine 4 предоставляет два языка программирования: это С++ и Blueprint (язык программирования движка, написанный специально для него). Весь процесс мы с тобой будем рассматривать на примере моего нынешнего проекта игры. Языком для этого проекта был выбран Blueprint, так как он почти не уступает плюсам и имеет в себе более наглядное программирование, чем тот же C++, и подойдет людям, которые только начинают изучать движок и знакомиться с программированием, плюс к этому он не позволит наделать ошибок, возможных на языке C++, и он будет гораздо понятнее для новичков. Так что после запуска движка при создании проекта мы выбираем языком программирования “Blueprint” и выбираем одну из заготовок проекта, их достаточно много, можете сами в этом убедиться, вы выберете то, что вам потребуется, я же выбрал проект от третьего лица. Первой моей задачей стало написание игрового меню и настроек игры. Ты можешь видеть, как я это реализовал (не следует сразу бросаться и писать основную логику игры, а начать нужно последовательное выполнения поставленных тобой задач). Само игровое меню поделено на несколько визуальных интерфейсов “Widget”, это условно (Главное меню, Обшей Widget настроек и каждый отдельный Widget настройки управления, графики и т.д.), причем такое меню не требует глубоких знаний в программировании, если ты используешь язык “Blueprint”, так как все настолько упрощено и интуитивно понятно, на этом моменте не возникает трудностей, достаточно знать основы в программировании. Следующим шагом было реализация игрового персонажа. Благо, Unreal engine 4 предоставляет нам заготовку под персонажа, что полезно как профессионалам, так и новичкам, что позволяет не тратить время на начальную настройку персонажа, а просто добавлять в нее изменения так, что мы этим и воспользуемся, впоследствии заменив модель и анимации. Мы идем по пунктам и следующим шагом была реализация интерфейса пользователя ”игрока” (таких как жизненный показатель, голод, здоровье и выносливость, чтобы создать некую сложность для игрока, так как ему придется следить за этими показателями и своевременно их пополнять, это уже геймплейная составляющая игры). После этого можно уже приступать к различным логикам и системам будущей игры. Я начал с системы инвентаря, сначала сделал визуальный интерфейс, а потом написал логику для него, но такие системы довольно сложные и не стоит ставить вопрос, как написать или сделать систему инвентаря, а поставить перед собой другую задачу, например, что будет у каждого предмета (имя, картинка, количество и т.д.), таким образом дела пойдут гораздо быстрее и в итоге можно получить желаемый результат. После проверить на наличие каких-либо ошибок, исправить, если такие имеются, и постараться максимально оптимизировать код, далее ты следуешь своему плану, который ты расписал, и, таким образом, по выполнении всех пунктов твоего плана ты получишь готовую игру.
Прості події

Автор: Костянтин Чорний

Введение При разработке компьютерных систем и программ, в том числе таких, в которых функционирует множество оригинальных сущностей и их дублей – экземпляров, возникает проблема отслеживания связей взаимодействия между этими объектами. И чем больше появляется этих объектов , тем сложнее вписать их в структуру приложения. Да, можно сказать что здесь явные проблемы с архитектурой и так не должно быть, но все равно мы наталкиваемся на проблему создания крупной многообъектной системы с гибкими динамическими связями и адаптивным поведением. Лучшее решение – событийно-ориентированное программирование! Итак, событие – это внезапное происшествие, появление которого нельзя предугадать, а можно только к нему готовиться. В подобном русле работает и человеческих мозг. Он ожидает появления события и, когда оно происходит, как-то на него реагирует. Давайте рассмотрим небольшой мысленный эксперимент. Представьте дорогу, пешеходный переход и светофор, который регулирует переход в данном месте. Светофор – это объект, который порождает событие. Он по воле своего внутреннего устройства будет включать или отключать зеленый свет, который будет разрешать пешеходам переход через улицу. В это время на тротуаре начинают собираться люди. Каждый человек – это объект, содержащий специфическое поведение, которое называется обработчиком события. В данном случае этот обработчик будет отвечать за пересечение улицы и будет вызываться во время возникновения события. У каждого человека обработчик разный, ведь все люди переходят через улицу по-разному. Один будет идти быстро, другой медленно, третий - смотреть на машины, которые стоят на перекрестке, а четвертый - следить за таймером, который будет отсчитывать секунды. Но каждый из них не предполагает, когда конкретно произойдет это событие, потому все они ждут на тротуаре. Когда человек подходит к переходу, он подписывает свой обработчик события перехода дороги на конкретное событие этого светофора. Если человек передумает переходить или, например, отойдет поговорить по телефону, то он не будет выполнять свой обработчик, если событие возникнет. И, наконец, когда светофор включается на зеленый, все люди начинают переходить дорогу. Возникло событие – выполнился обработчик. Что-же нам позволяет сделать событийную модель? Она разрешает динамически изменять связи между объектами и не только расторгать или устанавливать их, но и менять характер самого действия. Давайте рассмотрим пример создания события на языке C#. namespace TrafficLight {     // Светофор     public class Light     {         // Событие появления зеленого света         public event EventHandler Green;         // Метод который вызывает событие         public void SwichToGreen()         {             Green.Invoke(this, new EventArgs());         }     }     // Человек     public class Human     {         public string Name { get; private set; }         public Human(string name)         {             Name = name;         }         // Метод обработчик события перехода через дорогу         public void CrossingTheRoad(object sender, EventArgs e)         {             Console.WriteLine(this.Name + " crossing!");         }     }     class Program     {         static void Main(string[] args)         {             // Создание светофора             Light light = new Light();             // Создание людей             Human human1 = new Human("Alex");             Human human2 = new Human("Bob");             Human human3 = new Human("Alice");             // Подписка на событие             light.Green += human1.CrossingTheRoad;             light.Green += human2.CrossingTheRoad;             light.Green += human3.CrossingTheRoad;             // Вызов события             light.SwichToGreen();             Console.ReadKey();         }     } } Таким образом, язык C# позволяет быстро и легко создавать приложения, которые используют событийную модель. Более подробно узнать о событиях Вы можете в двенадцатом уроке курса C# Базовый. Для практики можете создать небольшую игру с игровыми объектами, взаимодействующими посредством событий.
Новий відео курс – Породжуючі патерни проєктування

Автор: Редакция ITVDN

Друзі, привіт! Ми з гарними новинами для тих, хто хоче поглибити свої знання стеку C#/.NET та створювати якісний код, з яким буде легко здійснювати роботу та масштабування – новий відео курс “Породжуючі патерни проєктування” вже на сайті в повному обсязі. Курс українською мовою! Патерни проєктування – це стандартизовані і загальноприйняті способи розв’язання поширених проблем у коді. У класичному каталозі «Патерни об'єктно-орієнтованого проєктування» так звана “банда чотирьох” виділяє породжуючі, структурні та поведінкові патерни. Абстрактна Фабрика (Abstract Factory), Фабричний Метод (Factory Method), Будівельник (Builder), Прототип (Prototype), Одинак (Singleton) – породжуючі патерни (Creational patterns), які розв’язують проблеми, пов'язані зі створенням об'єктів та екземплярів класів. Вони забезпечують гнучкість коду та ізолюють систему від способу створення, компонування та передачі об'єктів. Даний курс познайомить вас із тим, як використання патернів позбавляє певних проблем. Ви дізнаєтесь, що застосування відповідних патернів може значно покращити дизайн програмного забезпечення, зробити його більш гнучким і підтримуваним, а також зменшити зв'язаність між компонентами системи. Автор курсу – Владислав Рибніков, Senior .NET Developer у Innovecs, понад 6 років досвіду в розробці. Курс складається з 8 уроків загальною тривалістю 3 години 46 хвилин. Структура курсу: Початок роботи з патернами. Породжуючі патерни та Патерн Одинак. Патерн Прототип. Використання Singleton та Prototype. Патерн Будівельник. Патерн Фабричний Метод. Патерн Абстрактна Фабрика. Builder та Factory Method. Що ви дізнаєтесь на даному курсі: Як за допомогою породжуючих патернів вирішуються проблеми створення об'єктів. Як саме патерни забезпечують гнучкість та ізолюють систему від способу створення, компонування та передавання об'єктів. Як породжуючі патерни дозволяють приховати складності створення об'єктів від клієнтського коду та як це допомагає спростити код клієнта і уникнути прямих залежностей від конкретних класів. Як патерн Singleton і його версія Multiton гарантують, що в системі буде тільки один екземпляр певного класу або конкретна обмежена кількість екземплярів. Як це допомагає, коли необхідно забезпечити глобальний доступ до ресурсів або керувати станом програми. Познайомитесь з альтернативними методами розв’язання проблеми контролю життя об’єктів за допомогою Dependency Injection та IoC контейнерів. Як Фабричні методи та Абстрактні фабрики дозволяють делегувати створення об'єктів підкласам чи фабрикам, що дозволяє вибирати потрібний тип об'єкта, залежно від контексту виконання. Познайомитесь з тим, як породжуючі патерни дозволяють створювати об'єкти таким чином, що зміни в ваших класах не впливають на клієнтський код. Дізнаєтесь, як це знижує залежність між клієнтом та вашими класами і робить систему більш гнучкою та легкою для підтримки. Зрозумієте, як саме патерни Builder і Prototype забезпечують контроль над життєвим циклом об'єктів і як це корисно при створенні складних або змінюваних об'єктів. Попередні вимоги Для комфортного проходження курсу необхідні базові знання C#/.NET та розуміння принципів ООП. Курс “Породжуючі патерни проєктування” буде корисним як тим, хто тільки починає вивчення патернів проєктування, так і тим, хто вже має певні знання, проте хотів би їх структурувати та повторити окремі теми. Дивіться перший урок у вільному доступі. Курс вже доступний на нашому сайті в повному обсязі – до кожного уроку є практичні завдання та опорний конспект. Якщо у вас є активна підписка, ви можете дивитися його прямо зараз. Курс входить до комплексних програм підготовки за спеціальностями: C#/.NET Developer; ASP.NET Core розробник; ASP.NET MVC розробник.     
Сервіс пошуку роботи в IT для Junior спеціалістів на ITVDN

Автор: Редакция ITVDN

Головна задача освітньої платформи ITVDN – дати нашим студентам ті знання та навички за обраною ІТ-спеціальністю, які будуть достатніми для успішного початку кар’єри. Однак опанування професії – лише перша сходинка. Не меншим випробуванням є ще й пошук роботи та проходження співбесід. Ми ж не зупиняємося на навчанні і хочемо допомогти тим, хто вже його завершив і готовий зробити наступний крок. Тому ми з радістю представляємо наш новий розділ на сайті ITVDN – “Вакансії”. Давайте ми познайомимо вас з ним детальніше! Для чого ми створили цей розділ Головна мета – допомогти новачкам розпочати свою кар’єру в ІТ-індустрії, а саме – спростити процес пошуку першої роботи/стажування та збільшити шанси на успішний старт. Наразі це дуже актуально, оскільки ринок ІТ має сильну конкуренцію серед новачків. Ситуація ще більше погіршилася внаслідок коронавірусних обмежень та повномасштабної війни. Завдяки розділу “Вакансії” ITVDN стає не лише платформою для навчання, а й надійним помічником в розбудові успішної кар’єри у високодинамічній сфері ІТ. Для кого це корисно? Розділ “Вакансії” – це класна можливість для пошуку першої роботи тим, хто: Вже закінчив навчання за спеціальністю і знаходиться в активному пошуку своєї першої роботи або стажування в ІТ. Знаходиться в процесі навчання і хоче паралельно моніторити ІТ-ринок, аби підтримувати мотивацію і бути в курсі поточних вимог до початківців. Ми публікуємо вакансії рівнів Intern, Trainee та Junior від наших партнерів, чий стек технологій достатньо наближений до того, який ви можете опанувати у нас. Це дозволяє новачкам швидше знаходити першу айтішну гавань, а роботодавцям – набирати в команду потрібних кандидатів, з яких можна виростити кваліфікованих ІТ-спеціалістів. Вакансії можуть охоплювати широкий спектр спеціальностей: від розробки популярними мовами JavaScript, Python, C# та Java до дизайну, тестування, створення ігор та розробки мобільних застосунків під Android та iOS. Функціонал сторінки вакансій на ITVDN На головній сторінці перелік доступних вакансій, але при натисканні на кнопку “Усі вакансії” ви потрапляєте на сторінку з різноманітними фільтрами. Користуючись ними, ви можете відібрати саме ті пропозиції, які вас цікавлять. Серед доступних фільтрів: спеціальність, тип роботи, вид зайнятості, рівень. Обравши конкретну спеціальність, ви можете ознайомитися з деталями та відгукнутися на неї, вказавши необхідні дані: прізвище та ім’я, імейл, номер телефону, зручний для спілкування месенджер, та залишивши власний коментар (за бажанням). Також є можливість завантажити резюме.  Нижче на сторінці “Вакансіїї” ви знайдете перелік важливих та корисних вебінарів, які допоможуть скласти резюме, підготуватися до співбесіди, гарно проявити себе в новій компанії, успішно пройти стажування тощо. Запрошуємо до співпраці ІТ-компанії Запрошуємо представників ІТ-компаній до співпраці на взаємовигідних умовах! Ми готові надати допомогу у пошуку кандидатів на позиції Intern / Trainee / Junior, які відповідають вашим вимогам, розміщуючи інформацію про вашу компанію та вакансії на сайті ITVDN у розділі "Вакансії". Розміщення вакансій є безкоштовним. Крім того, ми індивідуально інформуємо потенційних кандидатів про відкриття нових можливостей.  Найбільше у нас початківців, які пройшли навчання за такими напрямками: FrontEnd; Python (BackEnd); C# / .NET (BackEnd); Java (BackEnd); Node.js. Окремою популярністю користуються напрямки C++, QA, Android, iOS, PHP, Ruby, Databases, UI/UX Design. Наша компанія також надає сервіс онлайн тестування, який допоможе перевірити рівень знань кандидатів за різними технологіями та напрямками. Це дозволить виявити найкращих претендентів, котрі відповідають вашим вимогам.  Також ми будемо раді запросити вас проводити онлайн зустрічі з нашими випускниками, щоб ви могли розповісти більше про вашу компанію та пропозиції нашим студентам. Об’єднавши наші зусилля, ми зможемо підготувати майбутніх ІТ-фахівців, які стануть цінними членами вашої компанії. Давайте розвивати українське IТ разом! Щоб зв’язатися з нами, перейдіть на сторінку “Вакансії”, натисніть на кнопку “Напишіть нам” нижче і заповніть невелику форму. Додатково залишимо контакти нашого HR-спеціаліста, який з радістю відповість на всі ваші запитання за даною темою. Контакти для зв’язку: Вікторія Чабан Email: hr@cbsystematics.com Telegram: https://t.me/hr_cbs Skype: Viktoriia Chaban (+380937595777)
Notification success