Какая метафора лучше всего описывает отношения между "значением" и "типом"?
Я пытаюсь нарисовать комикс с точным объяснением "значения" и "типа", и у меня возникла главная проблема: то, как люди используют термин "тип" в сравнении с "значением" в источниках повсюду, сводит меня с ума. Я продолжаю читать определения в различных метафорах:
"Тип" - это пустая оболочка свойств, а "значение" - это то, что ее заполняет.
"Тип" - это фабрика, из которой построены "значения".
"Тип" - это план фабрики, которая создает "ценности"
"Тип" - это книга правил, рассказывающая, что может делать "значение".
"Тип" - это идентификационная метка для "значения", в которое уже встроены встроенные свойства.
"Тип" - это организационная палата, в которой "ценности" находятся до того, как они будут вызваны в программу.
Хуже того, я продолжаю слышать, как "Тип" используется как прилагательное "Типизированный", что еще больше смущает меня: не является ли тип существительным? Кроме того, каждый раз, когда кто-то использует этот термин, создается впечатление, что существует множество определений и контекстов. Я чувствую, что невозможно объяснить, что такое "тип", если люди не разборчивы в деталях.
Я не знаю, где на самом деле задать этот вопрос, но я читал целыми днями, без разумного ответа. Как я должен визуализировать "тип" и как он относится к "значению"? И какие из моих 6 интерпретаций люди будут наименее придирчивыми? У меня сейчас очень болит голова...
Мои комиксы объяснили бы концепции в Python, но в зависимости от ответов я мог бы попытаться объяснить концепции программирования не зависящим от языка образом.
2 ответа
Тип похож на спортивную команду, а ценность - на одного из ее игроков. New York Knicks - это просто логотип, майка, набор цветов, имя. Игроку нужно носить эту майку и представлять эту команду, чтобы сделать Никс чем-то ценным (игра слов). Если Knicks - тип, Патрик Юинг - одна из его ценностей.
Как я должен визуализировать "тип" и как он соотносится с "значением"?
Действительно просто.
Вы знаете, что такое набор в математике.
В математике множество - это совокупность отдельных объектов, рассматриваемых как объект сам по себе.
Наборы имеют такие имена, как Color
, People
и т. д., и типы имеют имена, такие как Color
, People
, так далее.
Наборы имеют значения, а Типы имеют значения.
Набор из Colors
Тип: Color
Ценности: Blue
, Red
Набор из Integers
Тип: Integer
Ценности: 0
,1
Метафора
People think of sets but programmers think of types.
или это, но картина в комиксе Дилберта
You say Set I think Type.
I say Type you think Set.
Что-нибудь еще, что я должен добавить?
РЕДАКТИРОВАТЬ
Из комментария.
Объясните, что в контексте каждой из 6 метафор я видел, как люди описывают тип.
Понятие типа не является чем-то интуитивным, так что помогает установить аналогия. Использование набора в качестве аналогии является чрезмерным упрощением, поэтому, пройдя по шести метафорам, вы узнаете, где набор и тип различаются.
- "Тип" - это пустая оболочка свойств, а "значение" - это то, что ее заполняет.
Когда вы впервые даете тип или задаете имя, оно пустое. Затем вы добавляете значения к нему, чтобы заполнить его. Он может не иметь значений и быть действительным.
- "Тип" - это фабрика, из которой построены "значения".
"Тип" может использоваться для создания новых значений, но набор не создает новые значения. В математике они используют нотацию set build.
- "Тип" - это план фабрики, которая создает "ценности"
Для этого слово blueprint больше относится к абстрактному типу. Я не знаю подобных средств с наборами, отличными от нотации набора множеств.
- "Тип" - это книга правил, рассказывающая, что может делать "значение".
В объектно-ориентированном программировании типов есть методы. Если бы собака была типом, то у нее был бы метод запуска. Затем вы можете сказать собаке бежать.
В случае чисто функционального программирования вы можете создавать операторы, независимые от типа, а затем заставлять их работать со значением.
У множеств, AFAIK, нет методов, но у математики есть операторы, которые работают со значениями, и операторы ограничены наборами, с которыми они работают. Таким образом, в программировании операторы работают над значениями, а в математике операторы работают над значениями.
- "Тип" - это идентификационная метка для "значения", в которое уже встроены встроенные свойства.
Когда вы присваиваете значение без типа, это просто значение, но как только вы говорите, каков тип значения, тогда все свойства и методы этого типа могут использоваться с этим значением.
Что касается наборов, если я скажу 5, то что это? Целое число, натуральное число, действительное число, часть мнимого числа, длина и т. Д. Если я скажу, что 5 имеет целочисленное значение типа, то вы знаете, что можете сложить, вычесть, и преемник 5 равен 6, а предшественник 5 - 4. Если я говорю, что 5 имеет тип "простое", то вы знаете, что преемник 5 - 7, а предшественник 5 - 3.
- "Тип" - это организационная палата, в которой "ценности" находятся до того, как они будут вызваны в программу.
ЛОЛ. На самом деле кто-то написал это. Такой упрощенный взгляд. Если вы думаете, в конкретном мире, то значением будет конкретная сущность, а камерой будет конкретный контейнер. В этом смысле вы должны физически вытащить его из контейнера, чтобы использовать его. В обоих типах и наборах вам не нужно перемещать их, чтобы использовать их; они абстрактны, и вы ссылаетесь на них или идентифицируете по значению.
Также в качестве прилагательного "Типизированный". Это мне очень поможет.
В Python переменная не имеет типа ( duck typing), пока вы не поместите значение в переменную, тогда переменная получит связанный с ней тип. Помещение значения в переменную - это глагол, поэтому существительное становится глаголом, таким образом, "набирается", а в X печатается как целое число.
Я никогда не слышал, чтобы термин "набор" использовался таким образом.
Я использовал его только потому, что это слишком упрощает, чтобы вылечить что-то, что вы можете связать. Когда я думаю о типах, это сильно отличается от множества.