LINUX.ORG.RU

Any reason why you are defining your return type? Is this for readability?

 , ,


1

2

Я создал на этом форуме тему о том, что написал на питоне скрипт для загрузки файлов через ssh. Далее стал понемногу развивать его. Меня конечно заклевали... но так же один человек предложил опубликовать свою разработку (если её можно так назвать) на редите, что я и сделал. И там мне задали вопрос, который я написал в заголовке этой темы. И вот что, знаете, я не могу определиться с тем, что мне на него ответить. Может вы мне поможете? Мне вообще не очень близка динамическая типизация и я очень непонимаю, почему я должен обладать навыками телепатии и догадываться, какие типы данных могут попасть, например, в переменную, или лезть в документацию (если таковая к превеликому счастью имеется), чтобы узнать, что возвращает та или иная функция... ну а в противном случае - лезть в кишки функции и копаться-копаться или смотреть на примеры её использования и надеяться на то, что выуженная мною информация окажется полной и приложение не рухнет в произвольный момент в рантайме. Я, чёрт возьми, определяю возвращаемый тип для того, чтобы, ВНЕЗАПНО, знать возвращаемый тип. И я очень рад, что такую штуку, как тайпхинтинг, завезли в питон, она хоть как-то позволяет убрать часть граблей. Но на форуме по питону говорить, что динамическая типизация - говно, как-то не очень дружелюбно, мне кажется.



Последнее исправление: MetalBeaver (всего исправлений: 1)

Ответ на: комментарий от bread

Динамические ЯП проверяют типы в рантайме, поэтому на них легко можно написать программу, некорректную с точки зрения типов

Мощно задвинул. Даже и нечего возразить. Разве что: а ты пиши корректно! Могут быть ошибки конечно, но чтобы прям дверью хвост прищемлять везде, это надо совсем не думать о проектировании типов (с чего и начинается программа).

/thread

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

Это не выглядит задачей, для решения которой необходим язык с типами.

Ну, во-1, оно всегда неплохо.

Во-2, автор захотел типов, не я.

Miguel ★★★★★
()
Ответ на: комментарий от Shadow

Ну, не может на плюсах, пусть пишет на чём-то другом. Выбор-то огромный.

Собственно, даже если может на плюсах, пусть лучше пишет на чём-то другом.

Miguel ★★★★★
()
Ответ на: комментарий от bread

Разве что: а ты пиши корректно!

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

Miguel ★★★★★
()
Ответ на: комментарий от Virtuos86

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

anonymous
()
Ответ на: комментарий от anonymous

В си слабая типизация обоснована тем, что типы данных в языке – суть отображение ячеек памяти в удобной форме. Для высокоуровневых языков же слабая типизация – зло. Такое же зло – как динамическая. Только в слабой типизации ты можешь неявно кастануть одно в другое – и компилятор не пискнет, а в динамической – вообще непонятно, что в текущей переменной может быть в произвольный момент и что с ней можно делать. Тайпхинты не просто так завезли в питон. Обмазавшись ими, можно хоть как-то отлавливать мелкие ошибки и опечатки (хоть и в рантайме они не работают, но IDE подсказывает), к тому же они позволяют по-человечески сказать, что именно нужно передать функции и что конкретно она может вернуть. Также, не зря стали пилить (и он стал весьма популярным) TypeScript поверх динамически типизированного JS. Динамическая и слабая типизация – однозначное зло и должны быть искоренены из программе ракой практики, за исключением мест, где они необходимы с практической точки зрения, как в приведённом тобой Си, например. В сильно типизированных языках, с другой стороны, тоже не нужно перегибать палку: насколько я знаю, в F# нельзя напрямую присвоить int к float – и это трэш.

MetalBeaver
() автор топика
Ответ на: комментарий от Miguel

В общем, да. Отнюдь не всегда молжно взять и «выбрать язык с (статическими) типами» - язык может быть задан заказчиком, выбран в прошлом, выбран мнением команды/менеджера, определен наличием библиотек, да мало ли что. Естественно, если есть возможность выбора - надо выбирать нормально и статически типизированный язык, но если возможности выбора нет, аннотации - это _гораздо_ лучше, чем ничего. Особенно развитые аннотации, как в mypy.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

В шляпе типа си и плюсов слабая, скажем.

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

MetalBeaver
() автор топика
Ответ на: комментарий от MetalBeaver

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

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

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

anonymous
()
Ответ на: комментарий от Miguel

а почему бы сразу не писать без ошибок?

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

bread
()
Ответ на: комментарий от tailgunner

Здесь явно не тот случай. ТС пилит свой скрипт в одно рыло, а SSH-библиотеки есть для чего угодно.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

Ну, брать для одноразового скрипта серьезный язык тоже не лучшая идея: как минимум, они все компилируемые - не уверен, что возня с этим окупится. Аннотации - нормальный компромисс (понятно, что ТС их не проверяет, но всё же).

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от bread

Просто значимость ошибок типизации сильно преувеличивается любителями bdsm с компиляторами.

1) Зависит от системы типов. Потому что то, что ошибка логики в одном языке, будет ошибкой типизации в другом. Я не говорю даже о зависимых типах, где типизация может гарантировать всё вообще. Но банальное «два массива имеют одинаковую длину» вполне можно гарантировать не только в Хаскеле, но даже в плюсах (ну, по модулю того, что там вообще с типобезопасностью хреново).

2) Предотвращение ошибок — далеко не единственное, и, ИМХО, далеко не самое важное преимущество статической типизации. Например, неизмеримо упрощается рефакторинг.

ослаблять типизацию в рантайме

https://www.youtube.com/watch?v=_mmbKlY0l2Q

Miguel ★★★★★
()
Ответ на: комментарий от tailgunner

они все компилируемые - не уверен, что возня с этим окупится

Э-э-э... а в чём возня-то?

Некоторые можно вообще в скриптовом виде запускать.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

они все компилируемые - не уверен, что возня с этим окупится

Э-э-э... а в чём возня-то?

Назови мне язык, и, может быть, я скажу, в чем возня по сравнению с Python.

Некоторые можно вообще в скриптовом виде запускать.

Это подразумевает наличие интерпретатора на целевой машине (а его не будет). Здесь Python выигрывает hands down.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Назови мне язык, и, может быть, я скажу, в чем возня по сравнению с Python.

OK. Ну, возьмём Haskell, например.

Это подразумевает наличие интерпретатора на целевой машине

OK, но противоречит критерию «одноразового скрипта». Если речь идёт о распространении, то, как раз, компилируемый язык выиграет.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

Назови мне язык, и, может быть, я скажу, в чем возня по сравнению с Python.

OK. Ну, возьмём Haskell, например.

Ты же не всерьез, правда? Но по сравнению с Python он требует как минимум установки компилятора и, вероятно, Cabal (ради Paramiko).

Это подразумевает наличие интерпретатора на целевой машине

OK, но противоречит критерию «одноразового скрипта»

«Одноразовый» скорее в смысле «один раз написанный и никогда более не модифицируемый». Скорее всего, он и запустится только один раз, но, с другой стороны дальше он будет лежать на диске и ждать своего времени.

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

Выигрывает тот, чья исполняющая платформа самая распространенная, и в настоящее время это однозначно Python. Сейчас может оказаться, что в хозяйстве внезапно завелись ARM или, ТНБ прости, Power.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

но если возможности выбора нет, аннотации - это _гораздо_ лучше, чем ничего.

А потом они бац и разошлись с кодом. И ты по-прежнему можешь доверять только рантайму.

bread
()
Ответ на: комментарий от Miguel

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

anonymous
()
Ответ на: комментарий от tailgunner

Цитата про неосиляторов динамической типизации, хаха. Если уж связываться с хинтами, то нужно вообще весь свой код ими покрывать, иначе курам на смех. Есть у вас генерилки вменяемые? Кстати, от тупескрипта кодеры плачут горючими слезами, лично наблюдал. Помогает оно им мало, а гемора добавляет много.

bread
()
Ответ на: комментарий от bread

Цитата про неосиляторов динамической типизации, хаха.

Цитата про тех, кто не может удержать в голове больше одного предложения.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Но по сравнению с Python он требует как минимум установки компилятора

Опять-таки, если речь идёт об одноразовом скрипте для себя — то компилятор, как правило, уже есть. Если для других — то им пойдёт бинарник.

«Одноразовый» скорее в смысле «один раз написанный и никогда более не модифицируемый».

Ну, ТС сказал, что пилит потихоньку.

Сейчас может оказаться, что в хозяйстве внезапно завелись ARM или, ТНБ прости, Power.

Более вероятно, что в хозяйстве заведётся винда. Без питона.

Кстати, по поводу библиотек: питон-то на любом линухе будет, а библиотеки?

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

Смотря где. Ответ: нет. Но используется часто, вытеснив Perl как язык скриптования. На винду можно поставить только один питон, для разработки она не подходит. Для автора и прочих извращенцев изобрели такой python http://mypy-lang.org/

tz4678 ★★
()
Ответ на: комментарий от tailgunner

Цитата про тех, кто не может удержать в голове больше одного предложения.

Принимай пирацетам, деда.

bread
()
Ответ на: комментарий от Miguel

Сейчас может оказаться, что в хозяйстве внезапно завелись ARM или, ТНБ прости, Power.

Более вероятно, что в хозяйстве заведётся винда. Без питона.

На венде и линуксовый бинарь не запустится. Но ситуация с Python-скриптом исправляется инсталляцией Python, а ситуация с Linux-бинарем исправляется... установкой Linux-подситемы, наверное. Python wins. Again.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Ты сейчас сказал бессмысленную фразу.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

Их в пионерские лагеря, вожатыми. Сами попросятся в ГУЛАГ.

Virtuos86 ★★★★★
()

У тебя проблемы со словарным запасом, что ли? Напиши им It's for clarity.

no-such-file ★★★★★
()
Ответ на: комментарий от Miguel

Так мы договоримся до того, что выиграет жаба.

Ну так то шарпик, во всяком случае, как ЯП, получше жабы будет.

MetalBeaver
() автор топика
Ответ на: комментарий от Miguel

Так мы договоримся до того, что выиграет жаба.

У питона только ленивый не выиграет. Собственно лентяюги, которым не хочется осваивать программирование (на что могут быть веские причины) его и раскрутили.

bread
()
Ответ на: комментарий от Miguel

Последний раз, когда я на это дело смотрел, .NET под невиндовые системы был сильно забагован.

Возможно, был забагован Mono? Ведь сейчас уже используется .NET Core, который педалируется самими Мелкомягкими. Я лично сталкивался с проблемами WinForms под Mono много лет назад, но это лишь одна из библиотек для работы с окошками... касательно же самого языка и базовых библиотек, насколько я помню, даже в те далёкие времена небыло. То есть, например, я на 147% уверен, что могу написать ту же самую утилиту на шарпе и она будет работать под любой осью: от винды до линухов и макоси. Но мне интересно было поработать с питоном. Впрочем, до сих пор интересно. А с дотнетом я знаком десяток лет.

MetalBeaver
() автор топика
Ответ на: комментарий от MetalBeaver

Возможно, был забагован Mono?

Да.

Ведь сейчас уже используется .NET Core, который педалируется самими Мелкомягкими.

О, не знал, спасибо. Заценим.

Miguel ★★★★★
()
Ответ на: комментарий от tailgunner

По распространённости среди программистов - точно да. 80% нынешних питонщиков - всякие «аналитики» и «дата-сайентисты».

anonymous
()
Ответ на: комментарий от anonymous

По распространённости среди программистов

Речь, естественно, не об этом.

tailgunner ★★★★★
()
Ответ на: комментарий от MetalBeaver

а потом еще говорят, что пхп порождает дебилов...

tz4678 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.