Статья предоставляется как есть, может содержать неточную и неправильную информацию. Данный материал должен быть достаточным чтобы начать писать код программы и содержит только самые простые элементы синтаксиса языка программирования.
Алгоритм
Алгоритм - это конечная, строгая последовательность действий. Для описания алгоритма могут использоваться блок схемы или компьютерные программы. Для быстрого понимания например опишите процесс покупки хлеба - это и будет ваш алгоритм.
Программирование
Создание компьютерных программ.
Данные
Представление информации. Это может быть время, количество вещей, размеры и характеристики прибора и т.д.
Программа
Алгоритм + структура данных
Дано:
Водителю автобуса нужно преодолеть расстояние 120 км из пункта "А" в Пункт "Б". Сколько времени понадобится водителю если скорость движения ограничена 80 км/ч.
Расчеты
Для расчета мы берем знания математики и высчитываем по формуле: время пути = расстояние / скорось (V=S/t)
120 / 80 = 1.5 часа (т.е. 1 час 30 минут)
Вывод
Таким образом мы взяли исходные данные и использовали формулу для расчета и тем самым получили простой алгоритм. Использую таким образом исходные данные мы може расчитать время маршрута по всей стране или континенту. Закладывая различные ограничения скорости и вводя новые условия такие как время ожидания (ночевка в каждом пункте) мы можем расширять наш алгоритм и в итоге использовать например в мобильном приложении для путешественников.
Алгоритмы и на основе их программы создаются для решения каких либо конкретных целей человека. Ставьте перед собой цель которую будет выполнять алгоритм вашей программы. Problem solving (Решение проблем) если кому нужен такой мотиватор.
Языки программирования разнообразны также как иностранные языки. Выбор какой язык изучать индивидуален и не обязательно может быть ограничен только одним. У языка программирования существуют версии по аналогии со старым разговорным языком, современным и молодежным или просто его возрастом.
Хотя язык программирования может применяться для различных целей, он все же может быть ограничен, также как и разговорный язык не очень удобен в использовании различных наук, поэтому в определенных направлениях используют язык математики, геометрии, химических формул и т.п.
Язык программирования это набор слов (инструкций) с помощью которых создаются алгоритмы (внятное предложение речи), которое в дальнейшем компонуется в программу (что-то на подобии книг и журналов).
Язык программирования может быть интерпретированным и/или компилируемым.
Компилятор
Программный код компилируется в машинный код под определенную платформу. Машинный код работает быстрее и эффективнее, но являются платформозависимым.
Интерпретатор
Программный код выполняется интерпретатором из исходного кода, что более медленно, но работает на многих платформах.
Для создания программ в большинстве случаев можно использовать простые инструменты такие как блокнот, но лучше использовать специализированные инструменты IDE которые дают множество возможностей для легкой и быстрой разработки.
Используйте Visual Studio Community, Visual Studio Code или любой другой IDE.
Зачастую вы не можете сразу придти к людям и говорить с ними "Привет мир!", существует этикет, да и просто нужно узнать как правильно разговаривать. Поэтому для начала необходимо выяснить какой тип проекта вам нужен. Это консольное приложение, настольное приложение или это веб сайт или же более сложные проекты, не обязательно контактирующие с людьми. Благо при создания проекта в IDE вам могут предоставить готовый шаблон рабочей программы. Точка входу в программу различна для разных типов проекта и это легко узнать в описании конкретного языка программирования.
Программа состоит из инструкций и может содержать комментарии, не влияющае на исполнение программы.
/* комментарий */
инструкция 1
инструкция n
Тип данных
Для работы программы необходимо работать с данными. Это могут быть числа - данные для математических расчетов, строки для создания программ знаний и коммуникаций человека, логические состояние - да/нет/не знаю и т.п.
Есть предопределенные языком типы данных, примитивные типы, такие как bool, int, string (и ещё для примера: object, enum, кортежи). Программисты могут самостоятельно создавать свои типы данных.
У типов данных могут быть свои ограничения и значения по умолчанию, а также могут представлять пустые значения (null). Это связано с тем что порой нет необходимости в больших числах, а также наличия ограничения в возможности вычислительной техники (компьютеров).
Типы данных могут объединяться и создавать массивы, что как бы создают новый тип данных. Кортежи не является типом данных, но представляют из себя список, что вроде как роднит с enum но позволяет более интересно представлять некий набор данных. Пример: (string, int, double) person = ("Jone", 22, 173);
Типы данных делятся на простые и ссылочного типа. В зависимости от этого определяется как эти данные хранятся в памяти (в куче или стеке)
Константы
Значения которых устанавливаются во время компиляции и не могут быть изменены. Например дата вашего рождения, значение ПИ и т.д.
Числа (целые и вещественные), логические значения, символы и строки, управляющие символы (последовательности), null
Поля для чтения
Подобно константам, инициализируются в конструкторе и также не могут быть изменены
Переменные (Поля)
Программы используют переменные для сохранения значений строковых, числовых и т.д.. Пример на разных языках:
String name = "Jone" (Java, C#)
string name = "Jone" (C#)
Dim name as String = "Jone" (Visual Basic .Net)
name = "Jone" (Python)
Переменная может быть указанна с неявным типом (неявная типизация)
var name = "Jone" (Javascript, c#)
val name = "Jone" (kotlin)
Переменные можно определять при вызове методов параметрах
Литералы или константы
Это такие как true, false, числа, символьные или строковые, null и т.д.
Арифметические операции
Да, можно сказать программе сложить a + b и положить результат в переменную c. Но это уже вроде как банальные вещи которые должны учиться со школы или быть интуитивно понятными. Здесь хотелось бы показать что в языке существуют такие возможности синтаксиса как упрощенные выражения типа (см. операции присваивания)
Логические операции
И
ИЛИ
НЕ
Операция сдвига
Если просто это умножение (z=x<<y) или деление (z=x>>y) на 2 и по сути пропускаем, пока не понадобиться
Преобразования базовых типов данных
Для некоторых языков программирования строгого типизирования значения необходимо преобразовывать явно
byte a; int b = a; byte c = (byte)b;Тернарная операция
int a = 1; string result = a == 1 ? "Yes": "No";Объединение
Используется синтаксис вида BEGIN END или фигурных скобок {}
Базовые инструкции присутствующие почти во всех языка программирования
инициализация переменных
присваивание (=)
условия (if/else)
выбор из множества (switch или when)
циклы:
for
foreach
while
do...while
Прерывание, выход, возврат (return, break, continue)
Область видимости переменных
Для разных уровней и вложения кода доступна определенная область видимости
x = 1
x = 1 + 1
isBig = 1 > 10
isBig = 1 > 10 | 2 > 10
В данном примере вычисления второй операции сравнения выполняются если первое false
isBig = 1 > 10 || 20 > 10
Базовая инструкция есть почти во всех языках программирования
if/else
if/else if/else (if/elif/else)
По мере развития языка программирования в него закладывают новые варианты использования инструкций условия
state = логическое выражение ? истина : лож
state = if (логическое выражение) { true; } else { false; }
Метод это небольшой фрагмент программы который можно использовать множество раз или разделить сложную программу на более мелкие логические составляющие:
Сокращенная запись методов при одной инструкции не требует фигурных скобок
string SayHello() => "Hello";Методы могут быть с одним именем, но разными типами параметров
Параметры
Могут быть список через запятую и содержать в конце необязательные параметры с присвоением определенных значений
int DoSum(int x, int y, int z=5) => z+y+z;
И вызвать в произвольном порядке DoSum(y:2, x:3, z:10);
Параметры могут быть переданы по значению и ссылке.
Модификаторы:
ref - можете передать значение переменной и получить новое из метода
out - вы не можете передать значение переменной, только получить новый из вызываемого метода
in - внутреннюю переменную нельзя менять
Используя ключевое слово params в конце списка позволить использовать неограниченное количество параметров (здесь и далее конечно имеется ввиду разумное ограничение)
Рекурсивный вызов программы
Создание классов и размещение их в типе проектов - библиотека
Для объектно-ориентированных языков и для определения объектов используются классы. Объект - есть экземпляр класса. Примером объекта может быть все что угодно - человек, вещь и т.п (шаблон). Классы используются вне или внутри пространства имен (например как границы стран) или внутри других классов
Классы содержат
Поля
Методы
Конструкторы
Классы могут наследоваться от других классов. Класс можно инициализировать с указанием значение публичных полей
public Person() { name = "Неизвестно"; age = 18; }. Конструктор может ссылаться на
base(...)
this(...)
Класс может быть частичным при использовании модификатора partial и размещаться в различных файлах.
Конструкторы
При создании объекта статический конструктор вызывается первый, затем публичный.
Типы значений и ссылочные типы
Хранят значения в стеке и куче. Строковые, объектные и другие переменные хранятся в куче а в стеке идет ссылка на них
Важно понять что существуют как они хранятся и используются, уделите немного больше внимание на это
типы значений
ссылочные типы
Пространство имен
Это нечто вроде Республики, Области, Района в котором собираются свои классы по назначению. Для использования классов из других пространств используем их как
Псевдонимы
Свойства
Что-то среднее между полями и методами с помощью которых можно вложить дополнительную логику.
Операция сложения, вычитания возвращает значение типа int. Преобразование числа из большего типа в меньший называется сужающие (narrowing) преобразованием. При явных преобразованиях (explicit conversion) необходимо применить операцию преобразования: результат = операция () значение
Преобразовании числа из из меньшего в больший это называется расширяющие (widening) преобразования. Расширяющее преобразование было выполнено компилятором и называется неявным (implicit conversion). При неявном, расширяющем преобразовании беззнакового типа к типу большой разрядности добавляются дополнительные биты со значением 0 - это называется дополнение нулями (zero extension).
При явном преобразовании в меньший тип данных происходит усечение старших битов и преобразование происходит без ошибки с потерей данных. Чтобы вызвать исключение в таких случаях необходимо использовать checked.
Выполнение кода может вернуть исключение, при использовании блока try для обработки события исключения используется блок catch, finally выполняется обязательно после try или catch.
При работе с данными удобно работать с объектом а не множеством переменных описывающих этот объект. Для этого в языке программирования существуют классы и структуры. Класс при присваивании к разным переменным ссылаются на одни и те же данные. Структура же при присваивании создает копию.