Как написать полноценную программу

Спасибо Cyclic.sh за спонсорство этой статьи!

После долгого дня программирования я вернулся домой, пошел в душ, и тут мне в голову пришла одна мысль…

Известно, что телефоны прошли долгий путь развития. От громоздких коммуникационных устройств до маленьких компьютеров, которые помещаются в наших карманах.

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

Но, обладая всеми этими возможностями, кто скажет, что нельзя использовать телефон для написания полноценной программы?

Поэтому я взял на себя труд разгадать эту маленькую загадку. В этой статье я покажу вам, как легко написать полнофункциональное приложение, используя только ваш телефон и немного магии из Cyclic.sh.

Как спроектировать и написать полноценную программу

«Мне кажется, что понимаю функциональное программирование на базовом уровне, и я даже писал простые программы, но как мне создать полноценное приложение, с реальными данными, с обработкой ошибок и прочим?»

Ваша первая полноценная программа на Python.

  • Я буду описывать только один сценарий, а не всё приложение. Надеюсь, будет очевидно как расширить код при необходимости.
  • Это намеренно очень простая инструкция без особых ухищрений и продвинутой техники, ориентированная на поточную обработку данных. Но если вы начинающий, я думаю, вам будет полезно иметь последовательность простых шагов, которые вы сможете повторить и получить ожидаемый результат. Я не утверждаю, что это единственный верный способ. Различные сценарии будут требовать различных подходов, и конечно с ростом собственной экспертизы вы можете обнаружить, что эта инструкция слишком простая и ограниченная.
  • Чтобы облегчить переход с объектно-ориентированного проектирования, я постараюсь использовать знакомые концепции такие как «шаблоны», «сервисы», «внедрение зависимости» и т.д., а также объяснять как они соотносятся с функциональным подходом.
  • Инструкция также намеренно сделана в некоторой степени императивной, т.е. используется явный пошаговый процесс. Я надеюсь, этот подход облегчит переход от ООП к ФП.
  • Для простоты (и возможности использовать F# script) я установлю заглушку на всю инфраструктуру и уклонюсь от взаимодействия с UI напрямую.

Обзор

  • Преобразование сценария в функцию. В первой статье мы рассмотрим простой сценарий и увидим как он может быть реализован с помощью функционального подхода.
  • Объединение небольших функций. В следующей статье, мы обсудим простую метафору об объединении небольших функций в более крупные.
  • Проектирование с помощью типов и типы ошибки. В третьей статье мы создадим необходимые для сценария типы и обсудим специальные типы для обработки ошибок.
  • Настройка и управление зависимостями. В этой статье мы поговорим о том, как связать все функции.
  • Валидация. В этой статье мы обсудим различные пути реализации проверок и преобразование из опасного внешнего мира в теплый пушистый мир типобезопасности.
  • Инфраструктура. В этой статье мы обсудим различные компоненты инфраструктуры, такие как журналирование, работа с внешним кодом и т.д.
  • Предметный уровень. В этой статье мы обсудим, как предметно-ориентированное проектирование работает в функциональном мире.
  • Уровень представления. В этой статье мы обсудим, как вывести в UI результаты и ошибки.
  • Работа с изменяющимися требованиями. В этой статье мы обсудим, что делать с изменяющимися требованиями и как они влияют на код.

ОКОННОЕ ПРИЛОЖЕНИЕ С НУЛЯ — ПОЛНЫЙ БАЗОВЫЙ КУРС C++ WINAPI

Приступим

Давайте возьмем очень простой пример, а именно обновление некоторой информации о клиенте через веб-сервис.

  • Пользователь отправляет некоторые данные (идентификатор пользователя, имя и адрес почтового ящика).
  • Мы проверяем корректность имени и адреса ящика.
  • В базе данных в соответствующей пользовательской записи обновляются имя и адрес почтового ящика.
  • Если адрес почтового ящика изменен, отправляем на этот адрес проверочное письмо.
  • Выводим пользователю результат операции.

Вот диаграмма составных частей процесса:

Но это описание только успешного варианта событий. Реальность никогда не бывает столь простой! Что произойдёт, если идентификатор пользователя не найдется в базе данных, или почтовый адрес будет некорректный, или в базе данных есть ошибка?

Давайте изменим диаграмму и отметим всё, что может пойти не так.

Читайте также:
Программа для сканирования авто для Айфон

Как видим, на каждом шаге сценария могут возникнуть ошибки по различным причинам. Одна из целей серии этих статей — объяснить как элегантно управлять ошибками.

Функциональное мышление

Теперь, когда мы разобрались с этапами нашего сценария, как его реализовать с помощью функционального подхода?

Сначала обратимся к различиям между исходным сценарием и функциональным мышлением.

В сценарии мы обычно подразумеваем модель запрос-ответ. Отправляется запрос, обратно приходит ответ. Если что-то пошло не так, то поток действий завершается и ответ приходит «досрочно» (прим. переводчика: Речь исключительно о процессе, не о затраченном времени.).

Что я имею ввиду, можно увидеть на диаграмме упрощенной версии сценария.

Но в функциональной модели, функция — это черный ящик с входом и выходом, как здесь:

Как мы можем приспособить наш сценарий к такой модели?

Однонаправленный поток

Во-первых, вы должны осознать, что функциональный поток данных распространяется только вперед. Вы не можете вернуться «досрочно».

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

Как только мы это сделаем, у нас появится возможность превратить весь поток в единственную функцию — чёрный ящик:

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

Управление ошибками

На последней диаграмме изображены один успешный выход и три выхода для ошибок. Это проблема, так как функции могут иметь только один выход, а не четыре!

Что мы можем с этим сделать?

Ответ в том, чтобы использовать тип Объединение, где каждый вариант представляет один из возможных выходов. Тогда у функции действительно будет только один выход.

Вот пример возможного определения типа для вывода результата:

type UseCaseResult = | Success | ValidationError | UpdateError | SmtpError

И вот переделанная диаграмма, на которой изображён единственный выход с четырьмя различными вариантами, включёнными в него:

Упрощение управления ошибками

Это решает проблему, но наличие ошибки для каждого шага — это хрупкая и мало пригодная для повторного использования конструкция. Можем ли мы сделать лучше?

Да! Нам в действительности нужны только два метода. Один для успешного случая и другой для всех ошибочных:

type UseCaseResult = | Success | Failure

Этот тип очень универсальный и будет работать с любым процессом! Собственно вы скоро увидите, что для работы с этим типом мы можем сделать хорошую библиотеку полезных функций, которая подойдет для любых сценариев.

Ещё один момент — в результате, который возвращает функция, совсем нет данных, только статус успех/неудача. Нам потребуется кое-что поправить, чтобы результат функции содержал фактический успешный или сбойный объект. Мы объявим успешный и сбойный типы как универсальные (с помощью параметров типов).

Наконец, наша итоговая, универсальная версия:

type Result = | Success of ‘TSuccess | Failure of ‘TFailure

На самом деле, в библиотеке F# уже есть подобный тип. Он называется Choice. Для ясности я всё же продолжу использовать в этой и последующих статьях созданный ранее тип Result. Мы вернемся к этому вопросу, когда подойдём к более серьезным задачам.

Теперь, снова взглянув на сценарий с отдельными шагами, мы увидим, что должны соединить ошибки каждого шага в единый «сбойный» путь.

Как это сделать — тема следующей статьи.

Итог и методические указания

Итак, у нас есть следующие положения к инструкции:

  • Каждый сценарий равносилен элементарной функции.
  • Возвращаемый тип сценарной функции — объединение с двумя вариантами: Success и Failure.
  • Сценарная функция строится из ряда небольших функций, которые представляют отдельные шаги в потоке данных.
  • Ошибки всех этапов объединяются в единый путь ошибок.
  • functional programming
  • функциональное программирование
  • проектирование
  • f#

Источник: h.amazingsoftworks.com

Выучил основы Python, что дальше? Как писать полноценные программы?

Начал изучать Пайтон 3 месяца назад, по книге Эрика Метиза «Изучаем Python». Прочел 11 глав, в 12 он пишет игру с помощью pygame. Но прикол в том, что пишет он там далеко не то, что было написано в первых 11 главах, да еще и объясняет свой код, будто я сотый раз пишу эту игру. Отчаялся, пошел смотреть уроки по созданию телеграм ботов на питоне, но тоже там непонятно, нигде не применяются то, что я учил. С Django и Flesk то же самое, ничего из того, что я учил.
Затем я прочел книгу «A Byte of Python», ничего нового из этой книги не узнал.

Читайте также:
Программа чтобы делать прайсы

Основной вопрос: Как программировать на Python? Зачем мне программы которые работают в терминале? Как писать реальные приложения? Хотя бы калькулятор с интерфейсом? Где учиться?

Как учиться?

Зачем мне программы которые работают в терминале?

1) Программы на Python — это в основном консольные программы (или web приложения).
2) Если вы не можете писать консольные программы, то вам еще рано Flask, Django.

Как писать реальные приложения?

Реальные приложения — это приложения, которые выполняют свою задачу. Даже мой скрипт в 40 строк кода, который качает музыку с определенных сайтов, и сортирует её — это полноценная программа, которая отлично выполняет поставленною задачу.

Хотя-бы калькулятор с интерфейсом?

Ну так это вам нужно не Python, а какой нибудь C# или C++ + Qt.

Как вариант, книги, но уж точно не курсы на Youtube.

Если вы уже прочитали книгу, значит пишите для себя консольные приложения. Например, поиск больших файлов на диске, поиск пустых файлов, очистка временных папок, скрипт для автоматической загрузки обоев, музыки…

смотреть уроки по созданию телеграм ботов на питоне,

Боты — это самое бесполезное, что я когда-нибудь видел.

Первое (самое главное для начала)
Выбери, что ты будешь создавать: Web сайты, игры, десктопные программы
Как программировать на Python?
Это очень разнообразный вопрос, но постараюсь ответить понятно.
Если ты только начинаешь и плохо разбираешься, как сделать что-то в программе, то желательно в крупных программах (или если сложно в том же калькуляторе), на листе бумаги или найди какой-нибудь сайт где ты будешь делать блок-схемы. Блок-схемы очень просты в понимании и в создании, но надо учесть, что их нужно чертить для одной конкретной задачи, а не для всего проекта в целом.
Примечание: Не бери платные сайты для блок-схем
Что дальше вот ты начертил блок-схему.
Теперь когда ты определился, что ты будешь создавать и выбрал фреймворк для этого, ты начинаешь изучать по документациям: функции, методы и все остальное — но для начала посмотри вкладку в документации быстрый старт, там обычно кратко написана программа. Учи функции по их действиям (Не забывай про параметры) к примеру есть функция timer(10) запоминаешь, что эта функция ждёт 10 секунд, параметры: время в секундах.
Дальше так как ты знаешь основы ты пишешь код по блок-схеме (без блок-схемы логично выстраиваешь цепочку событий, что должен сделать компьютер для твоего результата). К примеру тебе нужно сделать какое-то действие при нажатии кнопки
вот пример:

import button button.create() # Тебе нужна кнопка — вот тебе компьютер её создаёт if button.clicked(): # Здесь ты создаешь условие, когда кнопка нажата, значение True будет тогда когда ты нажал кнопку и условие будет верным button.remove() #а это, то что будет с кнопкой во время нажатия, в данном случаи компьютер тебе её уберёт

Вот простой пример, но он не рабочий так как такой библиотеки нет.
Зачем мне программы которые работают в терминале?
Терминал будет твоим главным помощником, а не место для вывода программ. Почему?
1. Когда у тебя будет проблема в приложении все ошибки в основном идут в терминале.
2, В терминал можно выводить какие-то параметры для себя.
3.В терминале ты в основном и будешь запускать все программы (Исключение pycharm и другие IDE с запуском из IDE)
Как писать реальные приложения?
Уже написал, но ещё раз ты должен понимать, что делают функции и если функции возвращающие, то что они возвращают, какое значение и на базе знаний функций и методов и т.д. во фреймворке и базе основ питона создаешь программу
Хотя-бы калькулятор с интерфейсом?
Если десктоп, то берешь библиотеку Kivy и учишь все для вывода и ввода. Пример на русском языке:
Вывести кнопки в 3 столбца и 4 строчки
Вывести экран для значений

Читайте также:
Настройка отчетов в программе 1с

экран для значений
1 2 3
4 5 6
7 8 9
= 0 +

Если кнопка была нажата определить значение на кнопке
Если число, то вывести на табло значений
Если знак, то вывести знак на табло значений и присвоить роль знак(чтоб машина отличала значения)
Если равно, то сделать действие с левым значением при помощи знака, который имеет роль знак и правым значением, вывести результат на экран для значений

Вот пример на тебе понятном языке, переведи на программный язык и получишь результат который тебе нужен.
Где учиться? Как учиться?
Очень простое ёмкое слово — Интернет
Если ленивый и деньги есть то курсы
Если не ленивый и денег нет, то документации, видео с того же ютуба, видео с созданием какого-то проекта (того же калькулятора на kivy), если в видео не объясняют, что делает функция в google просто вбиваешь функцию, и читаешь документации

Чтобы чему то научиться, нужно практиковаться!

Если уже знаете основы Python, то гуглите для себя задания. Сначала ищите простенькие приложения, типа калькулятора. Если не знаете, как реализовать — опять Гуглите решение. Не нашли в гугле, пишите сюда, или же в SoF. Только так, эффективно можно научиться програмить : Практика + поиск инфы!

Как уже описали выше, для каждого нужно своё. (В том смысле, что для каждой цели, нужен свой язык и библиотека)
Python — это как язык для скорости. Чтоб быстро написать нужный скрипт. В принципе выше всё подробно расписали. Так что я могу лишь посоветовать так же уделить внимание Парсингу, классная штука. Всего в пару строчек кода можно автоматизировать большое количество процессов.

Но вообще, нужно так же посмотреть больше библиотек, чтоб понять их минусы/плюсы, и что лучше подходит. К примеру Pygame — неплохой для создания некого красивого интерфейса, с относительной простотой, но минус, что он не сильно то и подходит для игр, или же программ где нужна быстрая обработка для отображения. QT — можно сказать, что это как переделывание обычного консольного приложения в новый дизайн, но сама его суть не меняется. и тд.

Читать учебник, экспериментировать с примерами, после прочтения написать пет-проект.

Зачем мне программы которые работают в терминале?

Затем, что начинать надо с малого.

Как писать реальные приложения? Хотя-бы калькулятор с интерфейсом? Где учиться? Как учиться?

Если действительно понял основы, то дальше достаточно чтения документации и гугля, чтобы написать что угодно.

ни где не применяются то, что я учил

Зачем мне программы которые работают в терминале

В некотором смысле — веб-приложения и боты — это тоже консольные приложения. Просто они ещё с сетью работают.

Как писать реальные приложения?

А консольные приложения — не реальные?)

Хотя-бы калькулятор с интерфейсом?

Ну можешь посмотреть на pyQT

Читаешь в интернете документацию, читаешь статьи от более-менее авторитетных авторов.

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

Открываешь фриланс сайты, заходишь в раздел Python проекты, читаешь описание проектов, которые там паблишат ,заказчики, ознакамливаетесь с тематикой, таким образом узнаешь востребованную предметную область если что — пробуешь делать

Дело в том что Питон , не совсем для игр , под него нет не одного движка кроме Панды. Я и бросила его изучение как раз потому ,что он не для игр . Не смотря на то что он идеально бы подошел для разработки игр , вы в ява скрипт игру сделаете быстрее.
Под яву скрипт есть игровой движок Playcanvas https://playcanvas.com/

У Языка Питон много проблем, он мало пригоден для приложений и игр .
Отсутствия компилятора делает Питон мертвым языком.
В том же турбопаскаль проблем не было , у вас сразу была программа для компиляции , а у большинства современных языков этого нет .Хоть бери правда COBOL учи.
Пока для Питон не сделают хотя бы Двух мерный игровой движок , он мало полезен

Похожие записи:

  1. pyCMD; простая оболочка для выполнения математических и Python команд
  2. Тротлинг видеокарты asus zephirus s17 gx701lxs
  3. Функция JS для инициализации свойств
  4. односвязный список кода Python
  5. Оптимизация ядра диагонального умножения матрицы на вектор (? Diamv)

Источник: thefaq.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru