Кириллица в идентификаторах

Мне кажется, это - весело. Можно, например, писать консольные игры. Как при этом будет выглядеть код, можно представить:

immutable Мальчик
    имя::String
end

immutable Кот
    имя::String
end

накормить(м::Мальчик)=( println("Мальчику дали супа"); Сытый(м))
накормить(кот::Кот)=( println("Коту дали сметаны"); Сытый(кот))

immutable Сытый
    субъект
end

накормить(кто::Сытый) = 
  (println("Невозможно накормить сытого $(кто.субъект|>typeof)а."); кто)

Можно приступать:

julia> Вася = Кот("Вася")
Кот("Вася")

julia> Петя = Мальчик("Петя")
Мальчик("Петя")

julia> накормить(Петя)
Мальчику дали супа
Сытый(Мальчик("Петя"))

julia> сытый_Вася = накормить(Вася) 
Коту дали сметаны
Сытый(Кот("Вася"))

julia> накормить(сытый_Вася)
Невозможно накормить сытого Кота.
Сытый(Кот("Вася"))

Я тут отметил, что по привычке оформил кота в функциональном стиле - неизменяемым, да и мальчика тоже. В этом мире, сытый кот и голодный - два разных кота. (Шредингер, ваша шутка стала реальностью). Возможно в параллельно выполняющихся заданиях, например, независимо просчитывающих варианты развития событий и, как следствие, манипулирующих разными версиями одного кота - это удобно, но кот вовсе не во всех сценариях обязан быть иммутабельным субъектом. Мы могли бы определить его как type, и определить функции, меняющие его свойства, то есть, использовать в игре всего один его экземпляр, меняющийся во времени. С другой стороны, если имя кота менять правилами запрещено, а из остальных свойств - лишь контейнерный(е) элемент(ы), то мутабельность не нужна:

julia> abstract Субъект

julia> immutable Кот<:Субъект
                  желудок::Vector
                  имя::AbstractString
              end

julia> const пустой=isempty;

julia> голодный(кот::Кот) = пустой(кот.желудок);

julia> сытый(кот::Кот) = !пустой(кот.желудок);

julia> покормить( кот::Кот, что_дали) =  (push!( кот.желудок, что_дали); кот);

julia> Вася = Кот( [], "Вася" )
Кот(Any[],"Вася")

julia> Base.show( io::IO, b::Bool ) = write( io, b?"да":"нет");
WARNING: Method definition show(IO, Bool) in module Base at show.jl:233 overwritten in module Main at REPL[8]:1.

julia> голодный( Вася )
да

julia> покормить( Вася, "рыба" )
Кот(Any["рыба"],"Вася")

julia> голодный( Вася )
нет

julia> сытый( Вася )
да

Успехов вам в написании консольных игр, обучающих программированию на языке Julia!

results matching ""

    No results matching ""