4606

Программисты поймут⁠⁠

Программисты поймут

IT-юмор

7.6K поста53.3K подписчика

Правила сообщества

Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору

Вы смотрите срез комментариев. Показать все
2
Автор поста оценил этот комментарий

Неплохое селфи, но какой то ты слишком смазливый для мужика.

1
Автор поста оценил этот комментарий
Строгая типизация - это когда ты говоришь, что переменная типа "строка". И все, там лежит строка. И никогда там не будет лежать что-то другое. Ты можешь туда засунуть только другую строку.

Динамическая - это года ты что хочешь, то и кладешь. Сейчас строку, а тремя строками ниже - число. Или массив. Или кошку.


Чем лучше динамическая - удобнее программисту. Меньше писать, не надо думать, какой тут должен быть тип.

Чем лучше статическая - если ты хочешь сделать что-то недопустимое, например умножить кошку на восемь или узнать ее длину, тебя об этом никто не предупредит. Все будет компилироваться и упадет только после запуска.

раскрыть ветку (3)
6
Автор поста оценил этот комментарий
Только не строгая, а статическая.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Формально, описание из первого абзаца подходит и для строгой.


Впрочем, я действительно перепутал.

0
Автор поста оценил этот комментарий

ну хз

я как прогер на си иногда сталкиваюсь со всякими php и jsscript и вот  когда надо гонять из статически типизированого в динамический в принципе проблем нет. а вот вернуть что то такое что я потом смогу принять на стороне со статической типизаций тут мама не горюй.

0
Автор поста оценил этот комментарий

> Знаешь, после его объяснения я хоть что-то да понял
И зря. Потому что там написана дичь и ересь, которая не имеет к типизации никакого отношения. Приведенный им отрезок кода корректен и в C#, и в JS, в которых противоположны каждый из акспектов типизации - строгость, динамичность, явность.

0
Автор поста оценил этот комментарий

Смотри, статическая типизация

int i = 0; //тип переменной i - целое число

i = 3.13 //ошибка 3.13 - число с плавающей точкой,а i принимает только целые

Динамическая

i = 0

i = "Это строка"

Строгая
i = "Это строка"

i = i+1//ошибка, строку нельзя сложить с числом
Слабая
var i = "Это строка"

i = i + 1//Верно, 1 будет преобразовано в '1' и результат "Это строка1"

0
Автор поста оценил этот комментарий
Уже тысячу раз ответили, что он не прав, но почему бы и мне не попрактиковаться в красноречии?

    Динамическая типизация: у нас есть бутылка. Мы можем налить в неё воду или метанол. Как только налили — у нас появляется либо бутылка с водой, либо бутылка с метанолом.
    Статическая типизация(противоположность динамической): мы заранее берем отдельную бутылку под воду — в ней может быть только вода. А в заранее подготовленной бутылке с метанолом ничего кроме метанола не окажется.

    Слабая типизация — мы можем смешать метанол с водой, или, перепутав бутылку, и вовсе выпить чистый метанол. Почему мы умерли? Никто не знает, программа делала всё правильно — ошибку придется искать очень внимательно, выясняя, когда мы перепутали содержимое(или бутылку).
    Сильная(строгая) типизация — мы не можем выпить метанол, ибо такое поведение для него намеренно не создано. Смешать с водой его тоже будет затруднительно, разве что воссоздавать с нуля на молекулярном уровне новую жидкость, где будет требуемое соотношение воды и метанола.

    Именно в этом смысл поста — динамическая типизация не может быть хуже или лучше строгой, ибо это два несвязанных понятия, не являющиеся ни синонимами, ни антонимами. Попытка выявить лучше среди них, это попытка узнать, что же лучше, синий цвет, или теплая вода.
0
Автор поста оценил этот комментарий
Чел, не подумай, что я не рад снова тебя видеть или что хочу выгнать тебя, но.. у тебя что, совсем что ли больше нет дел, кроме как сидеть на пикабу?
раскрыть ветку (8)
8
Автор поста оценил этот комментарий

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


И стало мне интересно - а насколько упало количество комментариев, которые я пишу в день? Я ожидал, что вместо 63 в день у меня будет где-то 40, а то и 30 в день, ведь я сижу тут мало. Посчитал и оказалось, что я пишу... 58 комментариев в день.


Иными словами: мне для того, чтоб писать много комментариев, не надо целый день сидеть на пикабу. Просто то время, пока меня нет, никто не замечает. А когда я-таки добираюсь до компа, то меня резко становится много. И на это резкомногостановление мне много времени не надо. 


P.S. хотя сегодня я был в позднюю смену (это значит, что успел поднасрать в комментах с утра) и смена халявной была, меня не дергали практически, я поэтому учился и зависал на пикабу.

Иллюстрация к комментарию
раскрыть ветку (5)
2
Автор поста оценил этот комментарий

Ой, да чо ты мажешься, нет у тебя личной жизни, нет учебы, нет практики, ты сидишь ВЕЧНО на пикабу и печатаешь....печатаешь, строчишь и строчишь комменты.


И как тебя тянет так много писать, я иногда даже открою окно, чтоб напечатать, а потом подумаю, а нахуя? Нахуй кому то упало мое мнение, а мне что-то доказывать и закрою ) 

раскрыть ветку (3)
5
Автор поста оценил этот комментарий
"я иногда даже открою окно, чтоб напечатать, а потом подумаю, а нахуя? Нахуй кому то упало мое мнение, а мне что-то доказывать и закрою ) "(с)

Этот коммент однако набросал
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Ты не поверишь...но я так набросал уже 3 тысячи комментов.


И этот тоже набросал.

0
Автор поста оценил этот комментарий

Меня всегда от таких комментариев на поржать тянет :D.

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

0
Автор поста оценил этот комментарий
Поделись машиной времени =_= Откуда у тебя на это всё( + Пикабу + что-то ещё) есть время?
0
Автор поста оценил этот комментарий
Ну... мне, пожалуй, не дотянуть но Л4евера, но я тоже достаточно много времени тут провожу и комментариев оставляю (за сегодня 36).
Есть же время, проведенное в дороге(учитывая, что я учусь на другой стороне Москвы-это дохрена времени), скучные пары, валяния в кровати перед сном...
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
32 коммента за последние 13 часов. И ощущение, что я мог бы и больше
2
Автор поста оценил этот комментарий

как я понял...

Java - строгая типизация данных.

Пример:

String pizdec = "polniy pizdec";

тут переменная pizdec тип данных String, то есть текст, присваевается значение "polniy pizdec". Строгая типизация типа данных.

PHP - не строгая типизация данных(полный...)

Пример:

$pizdec = "polniy pizdec";

$pizdec - переменная которой присваивается значение "polniy pizdec" и php знает что это String, то есть текст.

Ну и следовательно появляются нюансы... Я правильно понял?

раскрыть ветку (17)
13
Автор поста оценил этот комментарий

Вот так, на примере:


c#, строгая типизация (тот же Java, только черный, толстый, упругий и в другой руке)


string pizdec = "polniy pizdec"; //мы сказали, что это текст. он навсегда останется текстом и ты не сможешь сделать с ним ничего "не текстового", вроде умножения или степени (если сам не запрограммируешь его реакцию на такие манипуляции).

pizdec = 2*4; //ошибка компилятора, ты даже не соберешь программу, потому что у тебя попытка присвоить текстовой переменной числовое значение


javascript, чад кутежа


var pizdec = "polniy pizdec" //переменная "pizdec" со значением "polniy pizdec"

pizdec = 2*4; //теперь там 8

pizdec = 5 + "вингорад" //угадайте что? "5виноград"

pizdec = pizdec / 5 //и даже сейчас нет ошибки, значение - NaN (Not a number, не число, технически, тоже число, наравне с Infinite - бесконечностью, все математические манипуляции с ним будут валидны, просто он так и будет оставаться "не числом")

pizdec = function() { console.log("kill me") } // грубо говоря, там где у нас было число, теперь функция - набор действий. Мы только что превратили номер пять в прыгать. Теперь, если написать pizdec(), то он выведет в консоли "kill me".

pizdec = ["polniy pizdec",2*4,function() { console.log("kill me") }] // теперь это массив значений, в первом - "polniy pizdec", во втором - 8, а в третьем - функция из предыдущего пункта. pizdec[2]() все еще просит его убить.

раскрыть ветку (11)
17
Автор поста оценил этот комментарий
Кажется, эта иллюстрация хорошо подходит к объяснению типизации в javascript
Иллюстрация к комментарию
раскрыть ветку (4)
2
Автор поста оценил этот комментарий
просто + перегружен на конкатенацию

Хотя конструкция '5'+-'2' = '5-2' это конечно жесть

раскрыть ветку (3)
0
Автор поста оценил этот комментарий
По моему наоборот '5'+-'2' очень даже очевидно. Сложить строку со строкой и получить строку
раскрыть ветку (2)
0
Автор поста оценил этот комментарий
Да но, почему минус в строку попал?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

унарный оператор - преобразовал '2' к 2, поменял знак получилось -2, + преобразовал -2 к строке '-2' и сложил со строкой '5'

2
Автор поста оценил этот комментарий

Ну раз пошел джаваскрипт, то как же без этого

https://www.destroyallsoftware.com/talks/wat

0
Автор поста оценил этот комментарий

Начнем с того, что в C# ужа давненько появилась условная типизация.

var pizdecpizdeckiy = 123;

var prostopizdec = "ну это уже ни в какие ворооота!";

Но это только синтаксический сахар. Язык по-прежнему считается статически типизированным, но вот объявлять конкретный тип переменной уже не нужно - только тип данных.

раскрыть ветку (4)
1
Автор поста оценил этот комментарий
dynamic же
раскрыть ветку (3)
0
Автор поста оценил этот комментарий

Нет, в шарпе не динамическая типизация.

раскрыть ветку (2)
0
Автор поста оценил этот комментарий
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Вон оно чё... Нет, я с шарпом не настолько плотно сидел. Да и теперь, почитав, не считаю это хорошей идеей, в статически типизированный язык добавлять динамически типизированный тип... На крайний случай можно уж и с дженериками что-то придумать, абстракцию применить.

0
Автор поста оценил этот комментарий
Ну с тем, что java сильная (сильная, не строгая, нет строгой типизации), а php слабая, ты угадал, но не причину. К примеру с\с++ считают слабо типизированным. Но этим никто не пользуется. Да и строгого определения в отличии от статической\динамической типизации нет. Критерии премерно такие: в сильно типизированных нет неявных преобразований типов, и данные, которые изначально были одном тиром нельзя вести как данные другого типа. Вот в java все преобразования довольно явные, вот в с++ можно любой любые данные вести себя как данные определённого типа, если этот им имеет такую-же длину (reinterpret_cast). Им, вроде, никто и не пользуется, но он, вроде и есть). А вот неявными преобразованиями типов ещё как пользуются.
Вот в php твоя строка запросто и без дополнительных манипуляций может вести себя как множество, если ты её впихнёшь не туда (или у тебя хитроумный план (читай быдлокод (хотя не пишу на php, может там так заведено)))
раскрыть ветку (4)
1
Автор поста оценил этот комментарий
Конечно заведено. Вообще создаётся впечатление что он просто создан для того чтобы создавать один массив который включает в себя ВСЁ. Чего далеко за примерами ходить, достаточно на битрикс посмотреть. Да фиг с ним с битриксом. Одна переменная $GLOBALS чего стоит.
0
Автор поста оценил этот комментарий

кстати, в php7 завезли тайпхинтинг

Автор поста оценил этот комментарий

Жабка перестаёт быть статически типизированной, как только студент узнает о рефлексии!

А в дельфе вообще строка и является идеальным массивом байт, особенно при чтении сокетов.

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Опять-же, всё в сравнении. В с++ есть тоже динамическая загрузка классов. И подсунуть туда можно что угодно. Но большая часть кода имеет статическую типизацию
0
Автор поста оценил этот комментарий

Вы сейчас про какой язык говорите?

ещё комментарии
21
Автор поста оценил этот комментарий
А когда и это не понял?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

тогда поможет только это #comment_96618820

8
DELETED
Автор поста оценил этот комментарий

Тот момент, когда вы сказали хуйню, не понимая виды типизаций и все перепутав, но у вас 389 плюсов.


А у комментов, которые правильно объясняют - нет.


#comment_96617101

#comment_96631791

#comment_96642508

10
Автор поста оценил этот комментарий

Люди путают строгую - слабую типизацию и динамическую - статическую. И еще называют себя программистами. Куда катится мир. Это как путать теплое с мягким в прямом смысле.

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

Да ладно, такие понятия четко понимать не обязательно, пока ты джун и есть кому тебя поправить(знания аля паттернов - приходишь на их изучение, а оказывается что половину ты не зная юзал). Одно что я не люблю - когда люди говорят какую то инфу, не зная, правильно ли говорят.

5
Автор поста оценил этот комментарий
Вы путаете строгую и статическую типизацию. Оба приведенных примера - одно и тоже, по сути. При динамической типизации, тип переменной выводиться во время определения!,а при статической во время объявления. То есть корректный пример в данном случае String s = "hello"; так тип может быть проверен на этапе компиляции. Так же существует понятие сильной(строгой) типизации - когда компилятор не может делать преобразований типов, например, из целого в вещественное (но тут можно и поспорить). В хаскеле строгая типизация, а в с++ слабая статическая.
раскрыть ветку (2)
0
Автор поста оценил этот комментарий
Я бы их добил ещё зависимыми типами и Агдой :-)
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Вы поосторожнее, так и меня добьете)
4
Автор поста оценил этот комментарий

Вообще неправильное объяснение. Динамическая типизация, это когда ты можешь создать экземпляр объекта и прямо в рантайме накидать в него методов и свойств, в итоге ты в рантайме никогда не знаешь, с чем работаешь. С одной стороны это гибко и легко, подходит для маленьких проектов и скриптов, для веб-фронтенда, с другой - приводит к бардаку и код по мере разрастания разваливается, кроме того, его сложнее анализировать. Пример - JavaScript, где объект - это тупо словарь, с которым можешь делать всё, что хочешь.


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

11
DELETED
Автор поста оценил этот комментарий

Тут есть нюансы. Например, в C++ можно написать так: auto a = 0; и это всё равно будет статическая типизация, хотя мы нигде не указали явно, что это int.


Динамическая типизация - это когда переменная может менять свой тип по ходу работы программы, в момент присваивания значения, а не тогда, когда мы её объявили.

раскрыть ветку (15)
1
Автор поста оценил этот комментарий
Это называется вывод типов. Компилятор на основе твоего кода может вывести тип автоматически. В auto в C+ это довольно примитивный способ вывода типов.

Более продвинутый вывод типов есть в языках с системой типов Хиндли-Милнера (Haskell, F#).

Что-то типа того:
let add x y = x + y // Не указываем типы

add 1 2 // Т.к. 1 и 2 - int, то из данного выражения, в функции add аргументы x и y будут выведены как int

add 3 4

add 1.1 2 // Ошибка компиляции, т.к. выше в add уже вывелся тип int, а здесь 1.1 - float


И таких фишечек в данной системе типов много.

раскрыть ветку (2)
1
Автор поста оценил этот комментарий
т.к. выше в add уже вывелся тип int

Тут параметрический полиморфизм, так что последний вызов выведется как Fractional -> Fractional -> Fractional и никакой ошибки не будет. https://ideone.com/axbv4A

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Мой пример справедлив для F#, там нет типа Fractional, поэтому такой код не прокатит, но можно сделать так:
let inline add x y = x + y

add 1 0

add 1.0 2.0

0
Автор поста оценил этот комментарий

А можешь пример привести динамической типизации с++, а то я чайник, но интересно.

раскрыть ветку (11)
9
Автор поста оценил этот комментарий

А нет её, можно создать указатель void *, например, который сможет указывать на любой тип, но это не будет динамической типизацией, так как тип указателя какой был, такой и есть.

раскрыть ветку (8)
1
DELETED
Автор поста оценил этот комментарий

Пока пил кофе, камрад выше отлично ответил. Респектую!


P.S. Добавлю только, что типизация может быть либо статическая, либо динамическая (про псевдо-тип dynamic в C#, поручики, молчать!)

раскрыть ветку (3)
0
Автор поста оценил этот комментарий
хех, не только, вариантов гораздо больше - курим Бенджамина Пирса "Типы в языках программирования"
раскрыть ветку (2)
0
DELETED
Автор поста оценил этот комментарий

Не гораздо. Ещё "слабая-сильная" и "явная-неявная". Плюс "явная/неявная по выбору". Только вот не для этого ресурса такие замечания.


А либо/либо в том смысле, что не может быть одновременно и той и другой

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
ок, но вариантов всё-таки больше - с сопоставлением "по имени/по структуре", "простые/зависимые" и т.д. вплоть до полностью открытой системы как в Qi
0
Автор поста оценил этот комментарий

Спасибо. Вот я и думаю, вроде начал учить с++, а динамической типизации не видел.

раскрыть ветку (3)
0
Автор поста оценил этот комментарий
Подозреваю, что на шаблонах можно что угодно написать, покопай в сторону Boost, великолепный пример того, как можно использовать язык извращённым способом. Хотя конечно это будут библиотеки на метауровне (в них можно будет любые проверки реализовать), а не сам базовый язык. Считать ли всё это Си++ х.з.
раскрыть ветку (2)
0
Автор поста оценил этот комментарий

Шаблоны генерят код во время компиляции, так что не подойдёт.

0
Автор поста оценил этот комментарий

Если исключить каст *void (это единственный способ динамической типизации), то даже Boost не спасёт. Можно использовать union или Boost.Variant, но это не динамическая типизация, а тип-сумма, т. е. множество хранимых типов ограничено.

0
Автор поста оценил этот комментарий

Можно использовать элементы динамической типизации. Оператором dynamic_cast. Обычно это происходит примерно так: есть несколько наследников, от базового класс. В базовом классе хранится тип наследника. При получении базового класса, считываем тип и используя dynamic_cast кастуем к нужному типу. Так как наследник в памяти хранится всегда строго после базового класса, проблем с этим не возникает. Даже адрес переменной не меняется.

0
Автор поста оценил этот комментарий
Там же статическая, не ?
7
Автор поста оценил этот комментарий

Курите, товарищ. https://habrahabr.ru/post/161205/

3
Автор поста оценил этот комментарий

язык программирования сам определяет

язык программирования берет на себя задачу

язык программирования только после этого сообщит


Среда исполнения же. И да, объяснение неправильное.

раскрыть ветку (2)
3
махровый разработчик
Автор поста оценил этот комментарий

я бы сказал "платформа" или "реализация" (очень общее и размытое понятие), т.к. это может быть как задача компилятора (C++, С# , Java), так и интерпретатора (Python, PHP, Ruby).

(зануда-мод off)

И да, его объяснение неправильное.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Всё так, всё так. И да, там объяснение неправильное.

4
Автор поста оценил этот комментарий

А теперь попробуй рассказать по пыхыпы. Он ведь и слона на кактус умножит.

раскрыть ветку (7)
11
Автор поста оценил этот комментарий
Зачем ограничиваться PHP, для таких аномалий есть более удобная штука - js.
раскрыть ветку (5)
4
Автор поста оценил этот комментарий
Замечательный язык, хочу сказать!
Из всех ошибок на этапе запуска кода он тебе сообщит только о синтаксических ошибках.
Да и вообще о том, что у тебя в коде что-то не так сделано можно будет догадаться только по тому, что у тебя получится в результате выполнения кода. И время отладки в случае твоей криворукости вырастает просто в охуительнейшие часы и даже дни.

Чукча не писатель, поэтому внезапный вывод на правах имхо: TDD - годная штука для разработки на js.
раскрыть ветку (4)
1
Автор поста оценил этот комментарий

Вы знаете, я, спустя некоторое время, отказался от TDD. Я взял за себя правило написания функции assert как глобальной (можно заменить console.error, но она у меня это и делает) и правило "никогда не верить входящим данным в методе" вкупе "функция должна делать как минимум два assert'a" и "быть максимально атомарной" - это правила разработки NASA, если что. TDD уже давно не использую, но в случае падения на dev - я всегда вижу ошибку и знаю где искать (это когда данные ну совсем нереальные - в большинстве от server-side). На прод уже проверенный код попадает и assert делает что-то другое (в одном проекте он отправлял мне полный лог ошибок в спец хранилище и перезагружал код).

При этом код полностью покрывается тестами, если требуется, просто нужно создать условия dev и запустить условия выполнения - тогда можно увидеть assert

Автор поста оценил этот комментарий

Есть хорошая "припарка мертвому" -- трансляция Kotlin в js. Не скажу, что многим лучше, но хотя бы явная статическая типизация есть. Вообще, у котлина есть свои плюшки, но тут не подскажу. Я только пробовал простейшее расширение для хрома написать в качестве опытов над психикой человека

раскрыть ветку (2)
1
Автор поста оценил этот комментарий

Во-первых никто не отменят TypeScript, во-вторых никтогда не видил проблем с динамической типизацией. Не так сложно всегда приводить тип там, где это может иметь значение.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Это "не так сложно" на практике ухудшает понимание кода в разы. Была циферка, стала буковкой, а потом вообще в беляш превратилась. Чужой код читать становится невозможно

2
Автор поста оценил этот комментарий

В пхп как раз с этим нормально все. Строки клеятся точкой, а не плюсом, и ничего поломаться не может. (1 . 2 = '12') А числа всегда предварительно приводим к нужному типу (int) '1' + (int) 2 = 3.


Ни разу за всю практику у меня не было каких-то багов из-за типов.

1
DELETED
Автор поста оценил этот комментарий

С каких пор синтаксис инстанциирования определяет вид типизации?

1
Автор поста оценил этот комментарий

Насчет "что ты еблан хочешь" - ай не всегда. Можно радостно получить NaN и протащить через весь цикл вычислений.

Насчет " ААА бля! вот я лапух, уже 100500 функций написал и теперь всё к ебеням переписывать неделю надо! сука! сука!" - название переменной должно отражать то, что в ней находится. Чтобы допустить этот косяк нужно лопухнуться с именем и с объявлением переменной.

1
Автор поста оценил этот комментарий
Не согласен. Типизация бывает динамическая и статическая, а так-же строгая и нестрогая и оба эти варианта ортогональны, т.е. только по этим двум критериям может быть 4 варианта типизации. Ну а вообще - Бенджамин Пирс "Типы в языках программирования". Но тому клоуну я бы тоже навалял, т.к. "duck typing" зло!
0
Автор поста оценил этот комментарий

Чет про все к "ебеням переписывать" не понял. А че, нельзя сделать

parseInt(Text); // Имя переменной с большой буквы??

? Ну и посыпать обработкой ошибок.


На самом деле в динамической типизации другая проблема - всегда надо проверять ручками, что у тебя там в переменной лежит. Например переменная var x = "123"; - очевидно же что строка, но так же очевидно, что 123 - это число. Значит можно с ним работать, как с числом. Но если там например "123 " (пробел в конце) - получится кака, хотя очевидно же, что там число 123, но пробел все ломает.


Вот примеры. Можно нажать на F12 и во вкладке console и попробовать самому.

"123" * 3 // = 246, JS понял, что в строке число

"123 " * 3 // = NaN - Not a Number, JS не понял, как умножить строку на число

parseInt("123 ") // = число 123 - parseInt знает, как надо вычленять число даже из такой строки

parseInt("123 321") // = число 123 - ??? parseInt ищет число в строке до первого нечислового символа, все остальное обрезает и остаток конвертирует в число.
0
Автор поста оценил этот комментарий

В первой части коммента описана неявная, то есть автоматическая типизация. К динамичности - то есть к возможности изменения типа (а не момента вывода ошибок: на этапе компиляции или во время работы программы) это отношения не имеет.

0
Автор поста оценил этот комментарий

> к примеру var Text = "тупо текст"; язык программирования сам определяет что между двойных кавычек находится текст - это динамическая типизация
Каждый первый язык программирования знает, что между кавычек текст, потому что это строковый литерал. Но я понял, что вы имели в виду.

Тем не менее, из строки кода выше о типизации языка нельзя сказать ничего, кроме того что в нем поддерживается автоматическое выведение типов. Например, эта строка - корректный код C#, в котором сильная (строгая), статическая, явная, номинативная типизация. Она же корректна и в JS, где слабая (нестрогая), динамическая, неявная типизация.

0
Автор поста оценил этот комментарий
Извини за занудство, но
Статическая vs динамическая типизация
Строгая vs нестрогая типизация.
Фуф, отпустило
0
Автор поста оценил этот комментарий
Все равно нужна “версия для гуманитариев”
0
Автор поста оценил этот комментарий

Уважаемый, вы, как я посмотрю, шарите в языках. Хотелось бы спросить: какой язык лучше учить на досуге? Какой наиболее востребованный ныне?

0
Автор поста оценил этот комментарий

хз, е вижу проблемы


In [19]: Text = "тупо текст"


In [20]: Text*2

Out[20]: 'тупо тексттупо текст'

0
Автор поста оценил этот комментарий

"просто текстпросто текст" будет в питоне )

0
Автор поста оценил этот комментарий

string Text = "тупо текст" нельзя?

0
Автор поста оценил этот комментарий

Извините за тупой вопрос, только начинаю идти по пути изучения программирования.


А вот если я в джаве напишу

double x = 2

то при арифметических операциях с этой переменной, результат будет цельночислительный int

а если напишу

double x = 2.0 то всё норм


Не могу вопрос сформулировать, но думаю вы поняли о чём я. спасибо.

раскрыть ветку (1)
Автор поста оценил этот комментарий
В первом случае ты объявил переменную типа double, затем присвоил ей int константу "2". Во втором случае присвоил ей double константу "2.0". Можно double x = 2f писать. Тогда присвоишь тип float (давно не прогил на джаве, может путаю синтаксис но смысл такой)
0
DELETED
Автор поста оценил этот комментарий

Ну нихера не понял, давай лучше я расскажу

Допустим создал ты переменную cost = 0, и считываешь в неё данные из списка покупок:

cost += item[i]

И в конце оказывается что стоимость не 16,5, а "3,58,24,8"

То есть переменная была числом, а стала строкой


А в статической типизации переменная как была числом, так и осталось. А на строчку

cost += item[i]

компилятор бы ругался, и просил бы привести item[i] к числовому виду

0
Автор поста оценил этот комментарий
То, что язык программирования тебя послал, когда ты строку на 2 умножал - это ещё не так обидно. Обидно, когда он тихо увеличил строку в 2 раза и никому ничего не сказал (python) А ты потом сиди и майся где ошибка
0
Автор поста оценил этот комментарий

я это использую лишь с запросами линк(ну для этого мне кажется в шарпе они и созданы), в оыбчных ифах где в падлу писать int и var хотя ваще не знаю что там легче 3 буквы ебаные, я что дебил? И когда не знаю что я хочу сделать и что должно быть на выходе, а поставим вар, чо получим - то получим

0
Автор поста оценил этот комментарий
меньше времени на подобный мусор тратишь

Интересно, много времени требуется, чтобы написать String? Зато потом куча времени экономится на поиске ошибок времени выполнения.

0
Автор поста оценил этот комментарий

зато с динамической типизацией можно num = "10" просто текст, num = num + 0 опа, уже чирик. и наоборот, был чирик num = 10, а тут num = num + "" стал просто текст (lua). но если где-то накосячишь с такой магией то можно долго баг искать.

Автор поста оценил этот комментарий
Господи. Объяснение 10 из 10
раскрыть ветку (1)
12
DELETED
Автор поста оценил этот комментарий

Жаль что неправильное :)

0
Автор поста оценил этот комментарий

в руби можно строку умножать)

раскрыть ветку (8)
1
Автор поста оценил этот комментарий

Но если ты думал, что "2" это число 2 и ты хотел получить умножением 4, то получишь ты нифига не 4, а, вероятно, "22" если я понял как в руби строки умножаются.

раскрыть ветку (2)
2
Автор поста оценил этот комментарий
так же как и в питоне "2" * 4 будет "2222"
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Ну значит я все правильно написал, я же на два умножал.

0
Автор поста оценил этот комментарий
А в PHP сравнивать, и они даже могут быть равны.
раскрыть ветку (2)
3
Автор поста оценил этот комментарий
=== - пример хорошего тона
0
Автор поста оценил этот комментарий

И в яве могут, если неправильно сравнивать как ссылки.

0
Автор поста оценил этот комментарий

мало того, можно в процессе перевести строку с числом в число, сделать над ним операции и перевести опять в строку. ("125".to_i*2).to_s я не знаю как я жил без такого, удобно ведь)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Думаю во всех языках есть преобразования типов, просто реализовано по разному.

А если сильно увлекаться с подобными записями код становится не читаемым.

0
Автор поста оценил этот комментарий

Идите выёбываться в свой двор! Касается всей ветки!

ещё комментарии
Автор поста оценил этот комментарий

люди книги педалят, а ты за 1 коммент затащить решил)

ещё комментарии
Автор поста оценил этот комментарий

А разве не здорово в Python сделано, может и в динамическую, может и в строгую, если прикажешь?

Автор поста оценил этот комментарий

извиняюсь, я ни разу не программист, но любопытно. неужели нет таких приемчиков, типа "найти, заменить"?

или, грубо говоря, выгрузить текст в эксель, запилить формулу =ЕСЛИ("тупо текст";"STRING(тупо текст);"лети на йух")?

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

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

ПЫЩ ПЫЩ ОЛОЛО
Автор поста оценил этот комментарий

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

Автор поста оценил этот комментарий
Откатить так сложно, да..
Автор поста оценил этот комментарий

Ващето не var Text = STRING("тупо текст"), а string Text = "тупо текст". STRING("тупо текст") - это приведение к типу, а динамическая типизация осталась (var).

раскрыть ветку (3)
0
Автор поста оценил этот комментарий

а как быть с auto str = std::string("ne dinamika");?

раскрыть ветку (2)
3
Автор поста оценил этот комментарий
Кажется, между вами языковой барьер)
0
Автор поста оценил этот комментарий

А как быть?

Автор поста оценил этот комментарий

извините, но мы не продаем алкоголь после 22:00.

ещё комментарий
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества