Файл: пОНЯТИЕ ПЕРЕМЕННОЙ В ПРОГРАММИРОВАНИИ.виды и типы переменных.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 18.05.2023

Просмотров: 200

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

res += 2; alert(res); // выводит 3

res += 'string2'; alert(res); // выводит '3string2'

К преимущества динамической типизации можно отнести:

  1. Значительно упрощенное написание несложных программ, например, различных скриптов.
  2. Работа прикладного программиста с СУБД значительно облегчается. СУБД принципиально возвращают информацию в динамически типизированном» виде. Поэтому ценность динамических языков очень большая, например, для программирования веб-служб.
  3. В некоторых случаях требуется работать с данными переменного типа. Например, функция поиска подстроки возвращает позицию найденного символа (число) или маркер «не найдено». В языке программирования PHP этот маркер — булевое false. В языках с использованием статической типизацией это особая константа (std::string::npos в C++ и 0 в Паскале).

К недостаткам динамическая типизация относятся:

  1. Для динамической типизации требуется как минимум выполнить данный участок кода.
  2. Не действует в объектно-ориентированных языках, либо действует с значительными ограничениями, автодополнение: невозможно или трудно понять, к какому типу относится переменная, и вывести набор её методов и полей.
  3. Динамическая типизация по определению не проявляет свойства самодокументирования, что затрудняет разработку структурно сложных программ.
  4. Ощутимое снижение производительности из-за большого количества затрат процессорного времени на динамическую проверку типа, и излишние расходы памяти на переменные, которые могут хранить «что угодно». А также большинство языков с динамической типизацией не компилируемые, а интерпретируемые.

Постепенная типизация - представляет собой систему типов, в которой часть переменных и выражений может быть типизирована, и их корректность проверяется в момент компиляции, а часть может быть не типизирована, и об ошибках типизации в них мы узнаем в момент исполнения

В некоторых языках есть опциональная или постепенная типизация (gradual typing): они динамические по умолчанию, но позволяют добавлять некоторые статические аннотации. В Python недавно добавили опциональные типы; TypeScript — это надстройка над JavaScript, в котором есть опциональные типы; Flow производит статический анализ старого доброго кода на JavaScript.


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


2.1.1 СРАВНЕНИЕ СТАТИСТИЧЕСКОЙ И ДИНАМИЧЕСКОЙ СИСТЕМЫ ТИПИЗАЦИИ

Большинство динамических языков выдадут ошибку, если типы используются некорректно (JavaScript — известное исключение; он пытается вернуть значение для любого выражения, даже когда оно не имеет смысла). При использовании динамически типизированных языков даже простая ошибка вида "a" + 1 может возникнуть в боевом окружении. Статические языки предотвращают такие ошибки, но, конечно, степень предотвращения зависит от мощности системы типов.

Статические и динамические языки построены на фундаментально разных идеях о корректности программ. В динамическом языке "a" + 1 это корректная программа: код будет запущен и появится ошибка в среде исполнения. Однако, в большинстве статически типизированных языков выражение "a" + 1 — это не программа: она не будет скомпилирована и не будет запущена. Это некорректный код, так же, как набор случайных символов! &%^@*&%^@* — это некорректный код. Это дополнительное понятие о корректности и некорректности не имеет эквивалента в динамических языках.

Статическая типизация имеет место если тип данных определяется на этапе компиляции, а если на этапе выполнения программы, то динамическая. Иногда говорят, что переменная не имеет типа, хотя содержащиеся в ней данные, относятся к определённому типу данных, но выясняется это уже в то время, когда программа выполняется.

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

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



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

JavaScript пытается продолжить работу, даже если это означает бессмысленную конвертацию (вроде "a" + 1, дающее "a1"). Python в свою очередь старается быть консервативным и часто возвращает ошибки, как в случае с "a" + 1.

Существуют разные подходы с разными уровнями безопасности, но Python и JavaScript оба являются динамически типизированными языками.

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

Haskell же не позволит сложить integer и float без явного преобразования перед этим. Си и Haskell оба являются статически типизированными, не смотря на такие большие отличия.

Заключение

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

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

1.Понятие переменной - важнейшее понятие в программировании. Переменная используется для хранения различных данных в языках программирования и характеризуется именем, значением и типом.

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

3.В языках, поддерживающих структурное программирование, переменные в большинстве случаев разделяются на два типа по области видимости такие как глобальные переменные — объявленные вне всех функций и доступны отовсюду и локальные переменные — объявленные внутри функции и недоступны снаружи неё.


4.Что типы можно разбить на категории простые, сложные, абстрактные и прочие типы. В основном используются простые и сложные типы. В каждом языке программирования доступны разные простые типы данных. В некоторых языках для контролеров с программируемой логикой имеются простые типы для хранения времени, а набор базовых сложных типов может отличаться чаще по названию и деталям реализации. Но также у сложных типов есть и объективные критерии — однотипность элементов и способ доступа, позволяющие выделить главные представители сложных типов.

5.Понято, что существование типов не имеет смысла без процесса подтверждения того, что эти типы имеют логический смысл и программа может быть корректно исполнена. Тут и приходит на помощь проверка соответствия типов. Это процесс подтверждения и применения ограничений типов, и он может проходить как во время компиляции (т.е. статически), так и во время выполнения (т.е. динамически). Проверка соответствия типов нужна, чтобы убедиться в типобезопасности программы, что сведёт количество ошибок, связанных с типами, к минимуму.

6. На основании проделанной работы можно сделать следующий вывод: как бы статическая типизация не была хороша, во многих случаях просто необходимо применение динамической типизации. Например, когда существует необходимость поддержания совместимости при переходе на новый формат представления данных (например, когда старая часть проекта посылает процедуре дату символьной строкой, а новые объекты соответственно используют более современный числовой тип).

Список литературы

  1. А. Пирамидин. Учебник РНР в переводе на русском и авторском дополнении. –– М.: 2014.
  2. Брайан У. Керниган, Деннис М. Ритчи. «Язык программирования Си». –– М.:2005
  3. Линда Дейли Полсон. Разработчики переходят на динамические языки. –– М.:2007
  4. Агафонов, В.Н. Логическое программирование. – М.: 2018. - 936 c.
  5. Ашманов, С.А. Линейное программирование. - М.: 2010. - 520 c.
  6. Кнут, Д.Э. Искусство программирования (Том 1. Основные алгоритмы) – М.: 2009. - 228 c.
  7. Кнут, Д.Э. Искусство программирования (Том 2. Получисленные алгоритмы) - М.: 2010. - 386 c.
  8. Кнут, Д.Э. Искусство программирования (Том 3) - М.: 2011. - 125 c.
  9. Спольски Джоэл о программировании / Спольски, Джоэл. - М.: СПб: Символ-Плюс, 2006. - 352 c.
  10. Урман Oracle 8. Программирование на языке PL/SQL. Руководство для программистов Oracle / Урман, Скотт. - М.: ЛОРИ, 2014. - 610 c.
  11. Виленкин Н.Я., Виленкин А.Н., Виленкин П.А. Комбинаторика. –– ФИМА, МЦНМО, 2006.
  12. Дасгупта С., Пападимитриу Х., Вазирани У. Алгоритмы. –– М.: МНЦМО, 2014
  13. Achour Mehdi и др. Аргументы функции // Руководство по PHP. –– 2015