1-based 索引
Julia 的陣列、字串等索引是從 1 開始,而不是像 Python 那樣從 0 開始。 此外,切片區間通常包含最後一個元素,這對從 MATLAB 或 R 轉來的使用者較直觀。
這是一個專為初學者設計的 繁體中文 Julia 教學網站。你將學會 REPL 與腳本執行方式、基本語法、 陣列與索引、條件判斷、迴圈、函式、多重派發、廣播運算,以及資料分析與繪圖的入門範例。
end 關閉區塊、陣列索引從 1 開始、條件式必須是布林值。
sin.(x)。
先建立正確的語言觀念,學習會快很多。
Julia 的陣列、字串等索引是從 1 開始,而不是像 Python 那樣從 0 開始。 此外,切片區間通常包含最後一個元素,這對從 MATLAB 或 R 轉來的使用者較直觀。
end 結束區塊
在 Julia 中,if、for、while、function 等區塊
都要明確以 end 結束。縮排建議保持整齊,但它不是像 Python 那樣決定語意的關鍵。
Julia 的函式可以依據參數型別擁有不同方法。這種設計稱為 多重派發, 也是 Julia 在科學計算與泛型程式設計中非常重要的核心能力。
下面依照初學者最常碰到的主題,整理成可直接閱讀與練習的教學區塊。
你可以直接啟動 Julia REPL 互動式環境,輸入表達式後立刻看到結果。若表達式後面加上分號,
REPL 會抑制輸出。上一個結果可由 ans 取得。若要執行檔案,可使用
julia script.jl,或在 REPL 中以 include("file.jl") 載入。
1 + 2
# 3
ans
# 3
x = 10;
# 結尾加分號時,REPL 不顯示輸出
include("hello.jl")
# 載入並執行檔案內容
Ctrl + D 或輸入 exit()。
Julia 會依照值自動推斷型別。整數如 42 是整數型別,帶小數點的值如 3.14 則是浮點數。
字串使用雙引號,單引號通常代表字元。函式呼叫即使沒有參數也要加括號,例如 rand()。
name = "Julia"
age = 10
pi_value = 3.14159
is_fast = true
grade = 'A'
typeof(name) # String
typeof(age) # Int64
typeof(pi_value) # Float64
typeof(is_fast) # Bool
typeof(grade) # Char
Julia 的陣列使用方括號表示,索引從 1 開始。你也能用範圍語法 1:5 產生連續整數。
Julia 的切片通常包含結尾位置,這和某些語言不同。指定給另一個變數時,陣列內容不會自動複製。
nums = [10, 20, 30, 40, 50]
nums[1] # 10
nums[2:4] # [20, 30, 40]
r = 1:5 # 1, 2, 3, 4, 5
collect(r) # [1, 2, 3, 4, 5]
a = nums
a[1] = 999
nums # [999, 20, 30, 40, 50]
# 因為 a 與 nums 指向相同資料
Julia 的 if 條件式必須是 布林值,不能像某些語言那樣把 0 或 1 直接當條件。
此外,if 區塊會回傳值,因此可以直接把它當成表達式使用。
score = 82
if score >= 90
level = "A"
elseif score >= 80
level = "B"
else
level = "C"
end
println(level) # B
result = score >= 60 ? "及格" : "不及格"
println(result)
if 區塊不會建立新的區域作用域,這點和 for 迴圈的行為不同。
for 迴圈是最常見的走訪方式,可搭配範圍或集合使用。while 則在條件為真時持續執行。
若發生錯誤,可用 try-catch 攔截,必要時再配合 finally 做清理。
for i in 1:5
if i == 3
continue
end
println(i)
end
n = 1
while n <= 3
println("n = ", n)
n += 1
end
try
x = parse(Int, "abc")
catch err
println("發生錯誤:", err)
finally
println("清理完成")
end
Julia 函式可用傳統寫法,也可用簡潔的單行定義。匿名函式常用在資料轉換或高階函式中。 若函式需用名稱指定參數,可使用關鍵字參數。更進一步,還可以依參數型別定義多個同名方法。
function add(x, y)
x + y
end
square(x) = x^2
triple = x -> x * 3
function greet(name; punctuation="!")
"你好,$(name)$(punctuation)"
end
describe(x::Int) = "這是整數"
describe(x::String) = "這是字串"
println(add(3, 5)) # 8
println(square(6)) # 36
println(triple(4)) # 12
println(greet("小明", punctuation="~"))
println(describe(10))
println(describe("Julia"))
Julia 對陣列做逐元素運算時非常優雅。只要在函式或運算子前後加入 dot,
就能把原本針對單一值的計算,自動套用到整個陣列。像 sin.(x)、A .+ 3 都是典型範例。
x = 0:0.5:2
y = sin.(x)
A = [1, 2, 3]
B = A .+ 10 # [11, 12, 13]
A .= A .* 2 # 原地更新 A
println(A) # [2, 4, 6]
• 索引從 1 開始,不是 0。
• 所有程式區塊都要用 end 結束。
• 縮排不是決定程式區塊的語法條件,但仍建議一致。
• 陣列指定給新變數時不會自動複製。
• 逐元素運算通常需要 dot,例如 .*、.+、sin.(x)。
• 函式名稱後方有驚嘆號 ! 通常表示它會修改原資料。
• 條件判斷必須是布林值,不能直接用數字代替。
• 0 參數函式仍需寫括號,例如 rand()。
學會語法後,最重要的是看到它如何用在真實情境中。
這個例子示範陣列、迴圈、條件判斷與函式的搭配。你可以很快看懂 Julia 在資料處理上的自然寫法。
scores = [88, 76, 93, 85, 91]
function grade_summary(arr)
total = 0
best = arr[1]
for s in arr
total += s
if s > best
best = s
end
end
avg = total / length(arr)
return avg, best
end
avg, best = grade_summary(scores)
println("平均:", avg)
println("最高分:", best)
若你要做資料分析,DataFrames.jl 是最常見的表格資料工具之一。下面示範建立資料表、
取欄位與篩選資料的基本概念。
using DataFrames
df = DataFrame(
name = ["Amy", "Ben", "Cindy", "David"],
score = [92, 75, 88, 64]
)
println(df)
# 取出欄位
println(df.name)
println(df[!, :score])
# 篩選及格者(示範布林索引)
passed = df[df.score .>= 80, :]
println(passed)
df[!, :score] 會直接取到原欄位參照;若你需要複本,常見寫法是 df[:, :score]。
Julia 的繪圖生態系很完整。以下示範 Plots.jl 中最基本的流程:載入套件、準備資料、呼叫 plot()。
using Plots
x = range(0, 10, length=100)
y = sin.(x)
plot(
x, y,
title = "Sine Wave",
xlabel = "x",
ylabel = "sin(x)",
linewidth = 3,
label = "sin curve"
)
這裡的重點是 sin.(x):sin 原本是對單一數值計算,但加上 dot 後,
它就能對整個範圍逐元素計算。
作答後按下「提交測驗」,系統會立即計分並顯示解析。