Тайп-хинтинг возвращаемого функцией значения

hell0w0rd

Продвинутый новичок
Absinthe, под программированием на отступах я имел ввиду отсутствие фигурных скобок. В stylus я это могу принять, но не в нормальном коде. Каждому свое:)
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Absinthe, под программированием на отступах я имел ввиду отсутствие фигурных скобок. В stylus я это могу принять, но не в нормальном коде. Каждому свое:)
Когда-то меня напрягали фигурные скобки вместо begin - end. Тру стори.
 

Absinthe

жожо
Меня в руби куда больше стремает то что 0 == true
Код:
irb(main):001:0> 0 == true
=> false
и что переменные примитивных типов передаются всегда by-reference, а не by-value.
В руби нет примитивных типов. Есть базовые типы, которые являются наследниками Object. Объекты же передаются по ссылке.
От передачи объектов по значению даже пхп-кодеры отказались при переходе с 4 на 5 версию :D
 
Последнее редактирование:

флоппик

promotor fidei
Команда форума
Партнер клуба
Объекты же передаются по ссылке.
Не совсем, вообще-то.
Код:
def change_string(str)
str <<" I can insult you all you want"
str <<" because you'll never see this"
str <<" because I'm going to replace the whole string!"
str <<" Haha you smell bad!"
str ="What? I didn't say anything."# I'm so sneakyend

be_nice_to_me ="hello"
change_string(be_nice_to_me)
puts be_nice_to_me
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Там вообще технически - передача по значению, но значениями являются референсы на объект. Это _почти_ то же самое, что и передача по ссылке, за исключением того, что ты можешь поменять референс.
Я не говорю что я не знаю, почему и как оно работает, я говорю, что оно мне не нравится, т.к. оно иногда непредсказуемо в визуально очевидном поведении.
 

Absinthe

жожо
Аналог твоего последнего кода на PHP с таким же поведением.
PHP:
<?php

function changeObject($o) {
    $o->a += 17;
    $o = new stdClass;
    $o->a = 100500;
}
$o = new stdClass;
$o->a = 42;
changeObject($o);
echo $o->a;
При этом для разных типов в PHP поведение разное, что еще больше путает.

я говорю, что оно мне не нравится, т.к. оно иногда непредсказуемо в визуально очевидном поведении.
ИМХО наоборот очевидно считать, что все типы передаются одинаково, а не в зависимости от типа, как в пхп.
 

hell0w0rd

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

флоппик

promotor fidei
Команда форума
Партнер клуба
Аналог твоего последнего кода на PHP с таким же поведением.
Ну я про это и говорил, собственно, когда говорил, что мне не нравится такое поведение для примитивных типов, т.к. оно ненаглядно, в отличие от явного new.
Алсо, я нигде не утверждал, что в пхп нет неочевидности.
 

Absinthe

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

Алсо, я нигде не утверждал, что в пхп нет неочевидности.
Ну как будто в Java или C# объекты иначе передаются. Это классическое поведение.
 

hell0w0rd

Продвинутый новичок
Absinthe, омг, и правда. Не знал об этой разницы между си и плюсами. Значит как в плюсах
Объекты - понятно, хотя и не очевидно. Но скаляры однозначно должны по умолчанию передаваться по значению. Помимо php так в js, хотя как известно в js, аналогично руби, все переменные - объекты.
 

Absinthe

жожо
Но скаляры однозначно должны по умолчанию передаваться по значению.
Скаляры в руби? Там нет скаляров.
Код:
class Fixnum
    def +(other)
        self * other
    end
end

puts 2 + 3
хотя как известно в js, аналогично руби, все переменные - объекты.
Это ты уже третий раз прогнал в этой теме.
 

AnrDaemon

Продвинутый новичок
Пока под зад не пнут, народ не почешется. На PHP5 у меня хостер народ пинками загонял. Поначалу была возможность включить PHP5 (включил сразу, ибо до этого почти год теребил техподдержку вопросами "ну когда!"). Потом PHP5 стал дефолтом, появилась возможность вернуть PHP4, но постоянно вылезали в почте сообщения "у вас стоит PHP4, меняйте или валите!" (утрирую, но смысл воя на форуме был именно такой).
Сделали бы уже PHP6 нормально, с уникодом, как планировалось, и пофиг на быдлокодеров. Чем быстрее умрут, тем лучше для языка и сообщества в целом.

А такой тайп-хинтинг я в принципе не понимаю.
Зачем? PHP - скриптовый язык. Что вы к велосипеду вёсла прикручиваете? Плавать он от этого не станет.
 

Absinthe

жожо
А такой тайп-хинтинг я в принципе не понимаю.
Зачем? PHP - скриптовый язык. Что вы к велосипеду вёсла прикручиваете? Плавать он от этого не станет.
Ты предпочитаешь писать типы в комментарии к функции? Или и вовсе их не пишешь? (В таком случае твое замечание о PHP6 кажется немного странным)
 

AnrDaemon

Продвинутый новичок
Ну а чего на баше тогда не писать?
Да, действительно, чего бы на баше не писать? Если для решения задачи необходимо и достаточно возможностей баша (и не предвидится изменений в ТЗ) - я использую баш.

Ты предпочитаешь писать типы в комментарии к функции? Или и вовсе их не пишешь? (В таком случае твое замечание о PHP6 кажется немного странным)
Пишу. И, да, я бы предпочёл иметь возможность опционально указывать желательный тип переменной/тип результата, возвращаемого функцией.
Только вот хочу я этого прозрачно и однотипно во всех местах языка.
А не как сейчас с исключениями.. тут мы бросаем PHP error, и лови как хочешь, а тут вывешиваем эксепшен с красивеньким бэктрейсом. Хотите везде эксепшен - вертите обёртки над error_handler. Какого чёрта! Что, нельзя автоматом все ошибки в исключения перевести?
 

Absinthe

жожо
Да, действительно, чего бы на баше не писать? Если для решения задачи необходимо и достаточно возможностей баша (и не предвидится изменений в ТЗ) - я использую баш.
Даже если альтернативный более мощный продукт позволит сократить время и стоимость, все равно выберешь баш?
А именно это делает типизация параметров в PHP.


Пишу. И, да, я бы предпочёл иметь возможность опционально указывать желательный тип переменной/тип результата, возвращаемого функцией.
Только вот хочу я этого прозрачно и однотипно во всех местах языка.
А не как сейчас с исключениями.. тут мы бросаем PHP error, и лови как хочешь, а тут вывешиваем эксепшен с красивеньким бэктрейсом. Хотите везде эксепшен - вертите обёртки над error_handler. Какого чёрта! Что, нельзя автоматом все ошибки в исключения перевести?
Можно, если забить на BC. Нельзя. если не забить.
BC - одна из основных причин популярности PHP.
И предложенный тайпхинтинг этот как раз и пытается это сделать однотипно на уровне синтаксиса.
 

AnrDaemon

Продвинутый новичок
Если под "обратной совместимостью" понимается работа кода, написанного для PHP 5.4 под PHP 3.0 - как сказал один известный комментатор - "такой футбол нам не нужен".
Достаточно, чтобы скрипты, написанные под предыдущую главную версию PHP, без большого головняка выполнялись под новой, как это было при переходе от 4-й к 5-й.
 
Сверху