Skip to content

Tefaier/TimofeiBelov

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Private

This repository is used for HW and etcetera student stuff
Mostly used for Java + github learning + related things such as PostgreSQL

Practice

This section is dedication for practice with ".md"

Also it's a try to answer additional question - essay

Задачи, с которыми языки с динамической типизацией справляются лучше, чем со статической
Для начала общее пояснение:

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

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

Это полезно для создания функций, принимающие произвольные значения без использования generic. Так функция: def sum(a, b): return a + b (Python) сама приведет типы и попытается их сложить. В итоге можно будет передать int, int | str, str | int, float | double, int | str, Object | ...

Одну и ту же функцию можно будет использовать для разных типов и возварщать тоже разные. Python например позволяет еще и определить операцию сложения для классов.

Альтернатива, которую дают типизированные классы это generic и перегрузка функций. Но перегрузка заставляет в основном повторять код функции снова, делая последующее изменение сложнее. Generic же может иметь проблемы с приведением перед операцией или результата функции.

Еще есть преимущества при создании коллекций произвольных типов. Если например в dictionary заведомо известно, что некоторые ключи будут иметь значения определенного типа, то будет удобнее использовать динамическую типизацию и использовать соответственным образом значения с разными ключами. Статическая типизаия в этом случае же потребует приведения значений к чему-то наподобию Object (В C# есть более удобный для таких случаев dynamic, но он может не поддерживаться. Например в случае Unity. Да и в основе своей этот костыль является симуляцией динамического типа/слабой типизации) и попыткам обратной конвертации при получении значения по ключу.

В моей собственной практике это понадобилось при работе с json, куда я и сохранял такой словарь. Но оказалось, что dynamic в Unity не поддерживается, из-за чего пришлось делать разные попытки приведения типов для разных полей (т.к. ключами были enum, то такой подход мог быть реализован). Стоить помнить, что этот конкретный пример работал в моем случае, потому что библиотека читающая в и из json файла интерпретировала типы обратно так, как они были сохранены. (Я использовал Newtonsoft.Json в С#)

Ресурсы:

Ссылка Описание
Собственные знания None
Про типизацию Динамическая и статисечкая типизация как таковая в разных языках
Про динамическую от wiki Страница от wikipedia с динамической типизацией
Про определение операций для классов в Python Способы определения операции сложения для произвольных (пользовательских) классов
Про dynamic в C# Описание dynamic типа в C# от Microsoft

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors