Кириллица в идентификаторах
Мне кажется, это - весело. Можно, например, писать консольные игры. Как при этом будет выглядеть код, можно представить:
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!