Отлично, значит что-то принимающее тип и выдающее на его основе другой тип является дженериком. Напрмимер вы, когда берете тип животного и из него делаете тип клетки для этого типа животного. Но это не важно.
Клетка принимающая только собак, но при этом любую.собаку и гарантирующая, что выдает имеено собак не является ни под типом ни супертипом к клетке принимающей любое животное. На этом мы согласились?
Очевидно тогда клетка для собак это не клетка для любого типа животных.
В нее нельзя положить слона,
А гарантия "положить" на все супертипы.
Это как - в клетку для животных можно положить что угодно?
Клетка_для_любого<T> инвариантна относительно T.
Как и требует LSP - мы не можем подменить клетку в которое гарантированно помещается любое животное на клетку которая гарантирует что там только собаки и принимает только собак как и наоборот.
Дженерики - это, фактически, функции в пространстве типов. В зависимости от свойств функций, порождаемые ими типы могут сабтайпиться в любом направлении по отношению к аргументам, но для корректной работы должны удовлетворять LSP.
Тип - это множество возможных значений. Клетка для животных принимает все значения, что и клетка для кошек.
Тип клетки это множество возможных значений клеток. Клетка для собак это клетка для животных в том смысле, что собаки это животные, но клетка для собак это не клетка в которую можно положить любое животное. Например, слон в нее не уместится.
Клетка для животных в первом смысле не гарантирует того, что туда можно положить любое животное. Только то, что если оттуда удастся что-то достать, то это будет животное.
Клетка для любых животных и клетка для каких-то животных.
Я иногда находил несколько экземпляров одного и того же расширения у себя в разных местах.
Это в какой-то степени лечится соглашением о наименовании файлов. При попытке создать второй экземпляр вы натыкаетесь на то, что файл с таким именем уже есть.
Для конкретного продукта пузырька либо достаточно либо недостаточно. Если недостаточно, то наймут квиксортеров и так и будут поддерживать квиксорт. Если достаточно, зачем нанимать квиксортеров.
А еще я против того, чтобы поддержка фиксила баги. Продуктовую команду надо тыкать носом в их какашки и пусть они учитывают их на будущее.
Так из контекста ясно, что он собеседовался на позицию в компьютер-сайенс-ресерче и ему не перезвонили именно из-за этого. Он просто выбрал не тот язык.
Надо интегрировать с IDE. Типа как в играх с геймплеем. Exception - звучит трагическая музыка, debugging - героическая, создаешь класс - патетическая, типа "Время, вперед", code review - шансон.
Тогда удачи вам в делении. Заявленная же цель "поделиться"? Будем ждать пока дойдет до кого-то, кто воспримет и трансформирует ваши идеи в удобоваримую для широких народных масс форму.
Чем они принципиально отличаются от статиков в классах?
Отлично, значит что-то принимающее тип и выдающее на его основе другой тип является дженериком. Напрмимер вы, когда берете тип животного и из него делаете тип клетки для этого типа животного. Но это не важно.
Variance refers to how subtyping between more complex types relates to subtyping between their components.
Клетка принимающая только собак, но при этом любую.собаку и гарантирующая, что выдает имеено собак не является ни под типом ни супертипом к клетке принимающей любое животное. На этом мы согласились?
Собака подтип, а не супертип
А свойства должны быть таковы, чтобы соблюдать контракт клетки.
Клетка, которая принимает и выдает только собак не является клеткой которая принимает любое животное. Поэтому подстановка для них не работает.
Дженерик это функция которая делает из одного типа другой тип. То, что эта функция работает в голове а не выражена в ЯП на ход рассуждений не влияет.
Очевидно тогда клетка для собак это не клетка для любого типа животных.
В нее нельзя положить слона,
Это как - в клетку для животных можно положить что угодно?
Клетка_для_любого<T> инвариантна относительно T.
Как и требует LSP - мы не можем подменить клетку в которое гарантированно помещается любое животное на клетку которая гарантирует что там только собаки и принимает только собак как и наоборот.
Дженерики - это, фактически, функции в пространстве типов. В зависимости от свойств функций, порождаемые ими типы могут сабтайпиться в любом направлении по отношению к аргументам, но для корректной работы должны удовлетворять LSP.
Тип клетки это множество возможных значений клеток. Клетка для собак это клетка для животных в том смысле, что собаки это животные, но клетка для собак это не клетка в которую можно положить любое животное. Например, слон в нее не уместится.
Клетка для животных в первом смысле не гарантирует того, что туда можно положить любое животное. Только то, что если оттуда удастся что-то достать, то это будет животное.
Клетка для любых животных и клетка для каких-то животных.
Человек немножко не разобрался, чем отличается сабтайпинг от дженериков.
У меня такое ощущение, что он прочитал, что надо подставлять типы а не объекты.
JFYI Для гит есть posh-git
Они ж как мотоциклисты - каждый год новые
Это в какой-то степени лечится соглашением о наименовании файлов. При попытке создать второй экземпляр вы натыкаетесь на то, что файл с таким именем уже есть.
Музыка это и есть мем.
И это вам известно из исследования, поп-псиологической статьи или откуда?
Откройте настройки в студии. Там их много но они разбиты на группы и ориентироваться проще. В коде их тоже можно разбить на классы
Попробуйте поискать в коде запахи и расправиться с ними по рецептам
Изучите c#. Например, null coalescing operators имели бы вам убрать один if из кода
Почитайте что-нибудь про дизайн. Ddd, mvc, mvvm
Откудау вас эта информация?
Для конкретного продукта пузырька либо достаточно либо недостаточно. Если недостаточно, то наймут квиксортеров и так и будут поддерживать квиксорт. Если достаточно, зачем нанимать квиксортеров.
А еще я против того, чтобы поддержка фиксила баги. Продуктовую команду надо тыкать носом в их какашки и пусть они учитывают их на будущее.
Так из контекста ясно, что он собеседовался на позицию в компьютер-сайенс-ресерче и ему не перезвонили именно из-за этого. Он просто выбрал не тот язык.
Надо интегрировать с IDE. Типа как в играх с геймплеем. Exception - звучит трагическая музыка, debugging - героическая, создаешь класс - патетическая, типа "Время, вперед", code review - шансон.
Можно еще всякие шумы дождя ставить есть сервисы типа noisli где можно слушать онлайн и миксовать
Тогда удачи вам в делении. Заявленная же цель "поделиться"? Будем ждать пока дойдет до кого-то, кто воспримет и трансформирует ваши идеи в удобоваримую для широких народных масс форму.
Тут наш опыт расходится. Удачи вам в продвижении ваших идей.