Baseは基本的な機能を含む標準モジュールであり、Juliaの基礎ライブラリである。ほとんどの場合にBaseが必要なので、全てのモジュールは暗黙的に「using Base
」を含む。
Juliaプログラムに渡されたコマンドライン引数は、ARGS定数に文字列の配列として格納されている。
println(string(length(ARGS), " argument(s) were passed to ", PROGRAM_FILE))
for arg in ARGS
println(arg)
end
上記プログラムを実行すると、スクリプトに渡した引数が表示される。
$ julia example.jl foo bar baz
3 argument(s) were passed to example.jl
foo
bar
baz
Julia の Base.ENV 定数には、OS の環境変数が格納されている。
Julia> typeof(ENV)
Base.EnvDict
Julia> ENV
Base.EnvDict with 19 entries:
"SHELL" => "/bin/bash"
"WSL_DISTRO_NAME" => "Ubuntu"
"NAME" => "E595"
"PWD" => "/home/tsuka"
"LOGNAME" => "tsuka"
"MOTD_SHOWN" => "update-motd"
"HOME" => "/home/tsuka"
"LANG" => "C.UTF-8"
"LESSCLOSE" => "/usr/bin/lesspipe %s %s"
"TERM" => "xterm-256color"
"LESSOPEN" => "| /usr/bin/lesspipe %s"
"USER" => "tsuka"
"SHLVL" => "1"
"WSLENV" => ""
"XDG_DATA_DIRS" => "/usr/local/share:/usr/share:/var/lib/snapd/desktop"
"PATH" => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
"HOSTTYPE" => "x86_64"
"_" => "/usr/bin/julia"
"OPENBLAS_MAIN_FREE" => "1"
Julia> ENV["SHELL"]
"/bin/bash"
コマンドラインからJuliaに渡されたスクリプト名を取得するには、PROGRAM_FILE定数を参照すればよい。
println(PROGRAM_FILE)
上記プログラムを実行すると、Juliaで実行したスクリプト名が表示される。
$ julia example.jl
example.jl
stderr::IO
Base.stderr
は標準エラーストリームを参照するグローバル変数である。
標準エラーへ出力するには、標準エラーストリームを参照するグローバル変数stderrを使う。
標準エラーへ改行ありで出力するには、println関数の第1引数にstderrを指定する。
println(stderr, "ファイルのオープンに失敗しました。")
標準エラーへ改行なしで出力するには、print関数またはwrite関数の第1引数にstderrを指定する。
print(stderr, "ファイルのオープンに失敗しました。")
write(stderr, "ファイルのオープンに失敗しました。")
stdin::IO
標準入力ストリームを参照するグローバル変数
stdout::IO
標準出力ストリームを参照するグローバル変数
Juliaのバージョンを取得するには、VERSION定数を参照すればよい。
println(VERSION)
上記プログラムを実行すると、Juliaのバージョンが表示される。
$ julia example.jl
1.1.0
Juliaのバージョンを判定するには、VERSION定数をバージョン番号リテラルと比較する。バージョン番号リテラルは、文字列の前にv
を付ける。
if v"1.1" <= VERSION < v"1.2-"
println("バージョン1.1.x")
end
Base.MathConstants.eulergamma はオイラーの定数を表わす数学定数である。
julia> Base.MathConstants.eulergamma
γ = 0.5772156649015...
Base.MathConstants.golden は黄金比を表わす数学定数である。
jjulia> Base.MathConstants.golden
φ = 1.6180339887498...
Base.MathConstants.pi は円周率を表わす数学定数である。
julia> pi
π = 3.1415926535897...
Base.MathConstants.π は円周率を表わす数学定数である。
julia> π
π = 3.1415926535897...
Base.MathConstants.ℯ は自然対数の底(ネイピア数)を表わす数学定数である。
julia> ℯ
ℯ = 2.7182818284590...
値の範囲を示す。
UnitRange{T<:Real}
close(stream)
バッファをフラッシュして、IO ストリームをクローズする。
try
f = open("example.txt")
close(f)
catch
println(stderr, "ファイルのオープンに失敗しました。")
end
deleteat!() はコレクションの指定位置から要素を削除する関数である。
julia> x = [1, 2, 3]
3-element Array{Int64,1}:
1
2
3
julia> deleteat!(x, 2)
2-element Array{Int64,1}:
1
3
eltype() はコレクションの型を返す関数である。
julia> eltype((1, 2))
Int64
julia> eltype(("foo", "bar"))
String
julia> eltype((1, "foo"))
Any
empty!() はコレクションを空にする関数である。ただし、タプルや名前付きタプルを空にすることはできない。
julia> x = [1, 2]
2-element Array{Int64,1}:
julia> empty!(x)
Int64[]
julia> x = Dict("a" => 1, "b" => 2)
Dict{String,Int64} with 2 entries:
"b" => 2
"a" => 1
julia> empty!(x)
Dict{String,Int64}()
julia> x = Set([1, 2])
Set{Int64} with 2 elements:
2
1
julia> empty!(x)
Set{Int64}()
Base.endswith を使って、指定した文字列で終わるかどうかを確認できる。
endswith(s::AbstractString, suffix::AbstractString)
julia> endswith("Julia", "ia")
true
julia> endswith("Julia", "IA")
false
指定したメッセージでErrorExceptionを発生させる。
error("wrong argument")
プログラムを停止する。既定の終了コードは0で、プログラムが正常に完了したことを示す。
exit()
終了コードを使用してプログラムを停止する。
exit(1)
insert!() はコレクションの指定位置に要素を挿入にする関数である。
julia> x = [1, 2]
2-element Array{Int64,1}:
1
2
julia> insert!(x, 2, 3)
3-element Array{Int64,1}
1
3
2
isempty() はコレクションが空かどうかをブール値で返す関数である。
julia> isempty(())
true
julia> isempty((1))
false
julia> isempty((a = 1, b = 2))
false
julia> isempty([])
true
julia> isempty([1])
false
julia> isempty(Dict())
false
julia> isempty(Dict("a"=>1))
true
julia> isempty(Set([]))
true
julia> isempty(Set([1]))
false
join() は指定した文字列のコレクションを結合して返す関数である。
julia> join(["Julia", "Language"], "-")
"Julia-Language"
length() はコレクションの要素数を返す関数である。
julia> length((1, 2))
2
julia> length((a = 1, b = 2))
2
julia> length([1, 2])
2
julia> length(Dict("a"=>1, "b"=>2))
2
julia> length(Set([1, 2]))
2
occursinは第1引数に指定した文字列が第2引数に含まれていればtrue、含まれていなければfalseを返す。第1引数には正規表現を指定できる。
file = "index.html"
if occursin(r"[a-zA-Z]*html$", file)
println(file)
end
Juliaでファイルをオープンするには、open
関数を使う。
try
f = open("example.txt")
close(f)
catch
println(stderr, "ファイルのオープンに失敗しました。")
end
ファイルのオープンに失敗すると、SystemError例外がスローされる。
ファイルをreadモードでオープンする。
f = open("example.txt", "r")
ファイルに書き込むためにオープンするには、open
関数の第2引数に"w"
オプションを指定する。
f = open("example.txt", "w")
ファイルをappendモードでオープンする。
f = open("example.txt", "a")
オープンしたファイルを自動的にクローズするために、open() do という構文が用意されている。
open("example.txt") do f
for l in eachLine(f)
println(l)
end
end
open do に対応する end に達すると、ファイルが自動的にクローズされる。
popfirst!() はコレクションの先頭から要素を取り出す関数である。取り出した要素はコレクションから削除される。
julia> x = [1, 2, 3]
3-element Array{Int64,1}:
1
2
3
julia> popfirst!(x)
1
julia> x
2-element Array{Int64,1}:
2
3
print([io::IO], xs...)
引数に指定された値をストリームへ出力する。
println(xs...)
println(io::IO, xs...)
引数に指定された値と改行をストリームへ出力する。
push!() はコレクションの末尾に要素を追加する関数である。
julia> x = [1, 2]
2-element Array{Int64,1}:
1
2
julia> push!(x, 3)
3-element Array{Int64,1}:
1
2
3
push!() はコレクションの先頭に要素を追加する関数である。
julia> x = [2, 3]
2-element Array{Int64,1}:
2
3
julia> pushfirst!(x, 1)
3-element Array{Int64,1}:
1
2
3
run() は外部プログラムを実行する関数である。
julia> run(`ls -a`)
.bash_history .bashrc
Base.startswith 関数を使って、指定した文字列で始まるかどうかを確認できる。
startswith(s::AbstractString, prefix::AbstractString)
julia> startswith("Julia", "Ju")
true
julia> startswith("Julia", "JU")
false
ファイルの状態を取得するには、stat関数を使う。
stat(file)
stat関数は、ファイルに関する情報を含む構造体を返す。構造体のフィールドは次のとおり。
フィールド | 説明 |
---|---|
size | ファイルのサイズ(バイト単位) |
device | ファイルを含むデバイスのID |
inode | ファイルのiノード番号 |
mode | ファイルの保護モード |
nlink | ファイルへのハード・リンクの数 |
uid | ファイル所有者のユーザーID |
gid | ファイル所有者のグループID |
rdev | このファイルがデバイスを参照している場合、参照しているデバイスのID |
blksize | ファイル・システムの推奨ブロック・サイズ |
blocks | 割り当てられたブロックの数 |
mtime | ファイルが最後に更新された時刻(Unixタイムスタンプ) |
ctime | ファイルが作成された時刻(Unixタイムスタンプ) |
Julia言語でファイルのサイズと最終更新日時を取得する例を次に示す。
julia> s = stat("example.jl")
StatStruct(mode=0o100666, size=2507)
julia> s.size
2507
julia> using Dates
julia> Dates.unix2datetime(s.mtime)
2021-02-06T06:36:15.653
数値の合計値を返す。
sum(f, itr; [init])
sum(itr; [init])
sum(A::AbstractArray; dims)
sum(f, A::AbstractArray; dims)
julia> sum(abs, [1, 2, -3])
6
Core.AbstractArray
├─ Core.Array
├─ Core.DenseArray
├─ Base.BitArray
└─ Base.SubArray
Base.AbstractMatrix は AbstractArray{T,2} の別名であるため、以下に示す型も該当する。
Base.AbstractMatrix
└─ Base.Matrix
Base.AbstractVector は AbstractArray{T,1} の別名であるため、以下に示す型も該当する。
Base.AbstractVector
└─ Base.Vector
Base.sum 関数を使って Core.NamedTuple 各要素の合計値を求めることができる。
julia> sum((x = 1, y = 2, z = 3))
6
Base.sum 関数を使って Core.Tuple 各要素の合計値を求めることができる。
julia> sum((1, 2, 3))
6
Base.sum 関数を使って、Base.Matrix 各要素の合計値を求めることができる。
julia> sum([1 2;3 4])
10
Base.sum 関数を使って Base.Set 各要素の合計値を求めることができる。
julia> sum(Set([1, 2, 3]))
6
Base.sum 関数を使って Base.Vector 各要素の合計値を求めることができる。
julia> sum([1, 2, 3])
6
Base.sum 関数を使って Base.Dict 各要素の合計値を求めることはできない。
julia> d = Dict("x" => 1, "y" => 2, "z" => 3)
Dict{String, Int64} with 3 entries:
"x" => 1
"z" => 3
"y" => 2
julia> sum(d)
ERROR: MethodError: no method matching +(::Pair{String, Int64}, ::Pair{String, Int64})
Julia 言語で配列の値をソート(並び替え)するには、sort 関数を使う。
julia> sort([3, 1, 2])
3-element Array{Int64,1}:
1
2
3
デフォルトでは昇順(小さい順)でソートされる。
降順(大きい順)にソートするには、rev 引数に true を指定する。
julia> sort([3, 1, 2], rev=true)
3-element Array{Int64,1}:
3
2
1
alg 引数にソートのアルゴリズムを指定することもできる。次のアルゴリズムを指定できる。
julia> sort([3, 1, 2], alg=InsertionSort)
3-element Array{Int64,1}:
1
2
3
split() は指定した文字列で分割する関数である。
julia> split("Julia-Language", "-")
2-element Array{SubString{String},1}:
"Julia"
"Language"
unioin() はコレクションの和集合を返す関数である。引数に渡したコレクションのすべての値を含むコレクションを返す。
julia> union((1, 2, 3), (2, 3, 4))
4-element Array{Int64,1}:
1
2
3
4
julia> union([1, 2, 3], [2, 3, 4])
4-element Array{Int64,1}:
1
2
3
4
julia> union((1, 2), (3, 4), (5, 6))
6-element Array{Int64,1}:
1
2
3
4
5
6
intersect() はコレクションの積集合を返す関数である。引数に渡したコレクションのすべてに含まれる値のコレクションを返す。
julia> intersect((1, 2, 3), (2, 3, 4))
2-element Array{Int64,1}:
2
3
julia> intersect([1, 2, 3], [2, 3, 4])
2-element Array{Int64,1}:
2
3
julia> intersect((1, 2, 3), (2, 3, 4), (3, 4, 5))
1-element Array{Int64,1}:
3
ファイルから行を読み込むには、readlines
関数を使う。
try
f = open("example.txt")
lines = readlines(f)
for l in lines
println(l)
end
close(f)
catch
println(stderr, "ファイルのオープンに失敗しました。")
end
オープンしたファイルへ1行書き込むには、write
関数を使う。
try
f = open("example.txt", "w")
write(f, "Hello, world!")
close(f)
catch
println(stderr, "ファイルのオープンに失敗しました。")
end
collect(element_type, collection)
collect(collection)
値の範囲 (Base.UnitRange) から Base.Vector を生成する。
julia> v = collect(1:3)
3-element Vector{Int64}:
1
2
3
Core.Tuple を Base.Vector へ変換する。
julia> t = (1, 2, 3)
(1, 2, 3)
julia> v = collect(t)
3-element Vector{Int64}:
1
2
3
findfirst() は指定した文字列の位置を返す関数である。
julia> findfirst("uli", "Julia")
2:4
length() は文字列の長さ(文字数)を返す関数である。
julia> length("Julia言語")
7
Base.pop! はコレクションの末尾から要素を取り出すメソッドである。取り出した要素はコレクションから削除される。
julia> x = [1, 2, 3]
3-element Array{Int64,1}:
1
2
3
julia> pop!(x)
3
julia> x
2-element Array{Int64,1}:
1
2
repeat() は文字列を指定した回数分繰り返した文字列を返す関数である。
julia> repeat("Julia", 3)
"JuliaJuliaJulia"
replace() は指定した文字列で置き換える関数である。
julia> replace("Junior", "nior" => "lia")
"Julia"
Juliaで作業ディレクトリを変更するには、cd
関数を使う。
cd("/Users/tsuka/Documents")
Juliaで現在の作業ディレクトリを取得するには、pwd
関数を使う。
wd = pwd()
println(wd)
Juliaでディレクトリ内のファイルとディレクトリの一覧を取得するには、readdir
関数を使う。
try
dirent = readdir("/Users/tsuka/Documents")
for i in dirent
println(i)
end
catch
println("ディレクトリの読み込みに失敗しました。")
end
ディレクトリの読み込みに失敗すると、SystemError例外がスローされる。
先頭と末尾の空白を削除した部分文字列を返す。
strip([pred=isspace,] str::AbstractString) -> SubString
strip(str::AbstractString, chars) -> SubString
以下に示す引数を strip 関数に指定できる。
julia> strip(" example ")
"example"
julia> strip("example", 'e')
"xampl"
Juliaでディレクトリ内のファイルとディレクトリの一覧を、その下層ディレクトリも含めて再帰的に取得するには、walkdir
関数を使う。
try
for (root, dirs, files) in walkdir("/Users/tsuka/Documents")
println("$root 下のディレクトリ")
for dir in dirs
println(joinpath(root, dir))
end
println("$root 下のファイル")
for file in files
println(joinpath(root, file))
end
end
catch
println("ディレクトリの読み込みに失敗しました。")
end
ディレクトリの読み込みに失敗すると、SystemError例外がスローされる。
時刻を指定したフォーマットに変換した文字列で返す。指定できるフォーマットは標準Cライブラリと同じ。
フォーマット | 説明 |
---|---|
%d | 日 |
%H | 24時間表記の時 |
%I | 12時間表記の時 |
%m | 月 |
%M | 分 |
%S | 秒 |
%y | 西暦の下2桁 |
%Y | 4桁の西暦 |
lastmod = Libc.strftime("%Y-%m-%d", mtime(path))
型変換関数を使ってデータ型を変換することができる。
julia> BigFloat(pi)
3.141592653589793238462643383279502884197169399375105820974944592307816406286198
Julia 言語で列挙子を定義できる。
@enum EnumName[::BaseType] value1[=x] value2[=y]
列挙子を定義する例を次に示す。
julia> @enum Season spring summer autumn winter
それぞれの値を指定することもできる。
julia> @enum Season spring=1 summer=2 autumn=3 winter=4
begin end ブロックを使って、複数行に渡って記述することもできる。
julia> @enum Season begin
spring
summer
autumn
winter
end
julia> instances(Season)
(spring, summer, autumn, winter)
JuliaLang.org contributors 2023. Julia Documentation