Trang trợ giúp này là một hướng dẫn. Nó là một hướng dẫn chi tiết các cách thực hiện quy chuẩn của Wikipedia và không phải là quy định, bởi vì nó chưa được cộng đồng xem xét một cách kỹ lưỡng. |
Trang trợ giúp này cần được cập nhật do có chứa các thông tin có thể đã lỗi thời hay không còn chính xác nữa. Xin hãy cập nhật trang trợ giúp này nếu có sự kiện hoặc thông tin mới nhất. Xem trang thảo luận để biết thêm thông tin. |
Trong Wikipedia và các dự án của Wikimedia, có thể thực hiện một số phép tính đơn giản sử dụng mã
Hiện tại các hàm sau đang hoạt động: #expr
, #if
, #ifeq
, #iferror
, #ifexist
, #ifexpr
, , #rand
#rel2abs
, #switch
, #titleparts
. Các phép tính được thực hiện bởi máy chủ (server) chạy Wikimedia.
Cảnh báo: Phần mở rộng này chỉ đang được thử nghiệm[1]. Người phát triển phần mềm đã bật tính năng này lên có thể tắt nó bất cứ lúc nào, cho nên bạn cần phải theo dõi các trang và tiêu bản có sử dụng cú pháp này phòng trường hợp nó bị tắt, để các trang không bị đổ vỡ. Xin hãy xếp các tiêu bản dùng những hàm này vào Thể loại:Bản mẫu dùng ParserFunctions.
Loại | Toán tử |
---|---|
Nhóm (các dấu ngoặc) | ( ) |
Số | 1234.5 2.4E5 e (2.718) pi (3.142) |
Logic | or |
and | |
= != <> > < <= >= | |
Làm tròn | round |
Toán tử hai ngôi | + - mod |
* / div | |
^ | |
Toán tử một ngôi | not ceil trunc floor abs ln sin cos tan acos asin atan |
e + - |
Hàm này định giá trị của một biểu thức toán học và trả về giá trị đã tính được.
Các toán tử hợp lệ được liệt kê ở bên phải theo trật tự quyền ưu tiên. Xem thông tin chi tiết về hàm số của mỗi toán tử tại[2]. Độ chính xác và định dạng của kết quả trả về sẽ thay đổi tùy thuộc vào hệ điều hành của máy chủ (server) chạy wiki, và tùy thuộc vào định dạng số trên ngôn ngữ trang.
Khi định giá sử dụng đại số boolean, 0 tương ứng với false còn bất kì giá trị khác 0 nào khác, cả âm và dương đều tương ứng với true:
Một biểu thức nhập rỗng sẽ trả về một chuỗi rỗng. Biểu thức không hợp lệ sẽ trả về một trong những thông báo lỗi, có thể bắt các lỗi này bằng cách dùng hàm #iferror:
Một số biểu thức có thể gây ra lỗi tràn số thực khi tính các số cực lớn hay cực bé: {{#expr: 20060618093259 mod 10000}} → 3259 trong đa số các trường hợp, nhưng cũng có thể cho kết quả là -6357. Điều này thay đổi tùy thuộc vào đặc điểm và cấu hình của máy chủ (server) chạy wiki.. |
Xem bugzilla 6356.
Ví dụ:
{{#expr: (100 - 32) / 9 * 5 round 0}}
cho:
phép tính này cho biết 100°F tương đương với bao nhiêu °C, làm tròn đến số nguyên.
Toán tử | Phép tính | Ví dụ | |||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
không | không |
Sai:
| |||||||||||||||||||||||||||
exp |
So sánh:
| ||||||||||||||||||||||||||||
ln | Logarit tự nhiên |
Từ đây có thể tính log(2):
| |||||||||||||||||||||||||||
abs |
| ||||||||||||||||||||||||||||
trunc |
| ||||||||||||||||||||||||||||
floor |
| ||||||||||||||||||||||||||||
ceil |
| ||||||||||||||||||||||||||||
sin |
Góc tính bằng độ, ví dụ 30°:
| ||||||||||||||||||||||||||||
cos |
| ||||||||||||||||||||||||||||
tan |
| ||||||||||||||||||||||||||||
asin |
| ||||||||||||||||||||||||||||
acos |
| ||||||||||||||||||||||||||||
atan |
| ||||||||||||||||||||||||||||
+ | Dấu +(dương), phép toán một ngôi |
| |||||||||||||||||||||||||||
- | Dấu - (âm), phép toán một ngôi |
| |||||||||||||||||||||||||||
not | phép toán một ngôi NOT, phép logic NOT (phép phủ định) |
| |||||||||||||||||||||||||||
^ | Lũy thừa |
| |||||||||||||||||||||||||||
* | Phép nhân |
| |||||||||||||||||||||||||||
/ | Phép chia div |
| |||||||||||||||||||||||||||
div | Phép chia, giống như /, không phải phép chia số nguyên |
| |||||||||||||||||||||||||||
mod | "Modulo",phần dư của phép chia sau khi làm tròn (truncate) cả hai toán hạng thành số nguyên (toán tử PHP %). Cảnh báo rằng, div và mod khác với các ngôn ngữ lập trình. Lỗi này đã được vá (nhưng vẫn nên cẩn trọng), xem bugzilla:6068. |
| |||||||||||||||||||||||||||
+ | Phép cộng |
| |||||||||||||||||||||||||||
- | Phép trừ |
| |||||||||||||||||||||||||||
round | Làm tròn số ở bên trái theo số mũ của 1/10 được cho ở bên phải (hàm PHP round) |
| |||||||||||||||||||||||||||
= | Bằng (số và logic) |
| |||||||||||||||||||||||||||
<> | Khác (!=) |
| |||||||||||||||||||||||||||
!= | Khác, giống như <>, phép logic xor |
| |||||||||||||||||||||||||||
< | Bé hơn |
| |||||||||||||||||||||||||||
> | Lớn hơn |
| |||||||||||||||||||||||||||
<= | Bé hơn hoặc bằng |
| |||||||||||||||||||||||||||
>= | Lớn hơn hoặc bằng |
| |||||||||||||||||||||||||||
and | Phép logic VÀ |
| |||||||||||||||||||||||||||
or | Phép logic HOẶC |
|
Hàm này kiểm tra tham số thứ nhất có tồn tại (không rỗng) hay không. Hàm sẽ cho kết quả sai nếu như chuỗi kiểm tra rỗng hoặc chỉ chứa các kí tự trắng (như phím cách (khi nhấn phím SpaceBar), kí tự xuống dòng (khi nhấn phim Enter, v.v.).
Chuỗi kiểm tra được hiểu là văn bản (chuỗi kí tự) thuần túy, vì thế biểu thức toán học không được tính:
Một trong hai hoặc cả hai giá trị trả về có thể được bỏ qua:
Hàm này so sánh hai chuỗi và xác định xem chúng có đồng nhất hay không.
Nếu cả hai chuỗi là các giá trị số hợp lệ, chúng sẽ được so sánh về số (toán học):
Còn nếu như so sánh văn bản, thì việc so sánh này có tính tới sự khác nhau giữa chữ viết hoa, viết thường:
Nội dung bên trong các thẻ phân tích (ví dụ như <nowiki>) bị cắt ra trước khi các hàm phân tích được định giá trị, dẫn tới lỗi:
{{#ifeq: <nowiki>foo</nowiki> | <nowiki>foo</nowiki> | yes | no}} → no |
{{#iferror: <biểu thức> | lỗi | thành công }} cho ra lỗi nếu biểu thức gặp lỗi, tức là biểu thức bao gồm <strong class="error">, do #expr
, #ifexpr
, #time
, #rel2abs
, v.v. Hàm này có ích trong việc bắt gặp chuỗi sai được cho vào. Chẳng hạn:
{{#iferror:{{#expr:1+1}}|bad input|valid expression}}
cho ra valid expression{{#iferror:{{#expr:1+Z}}|bad input|valid expression}}
cho ra bad inputKhông bắt buộc phải định hai tham số cuối cùng. Nếu tham số thành công không được định, kết quả của biểu thức được cho ra khi thành công. Nếu tham số lỗi cũng không được định, và nếu mã này gặp lỗi, thông báo lỗi không được cho ra, còn nếu không gặp lỗi, kết quả của biểu thức được cho ra.
{{#iferror:{{#expr:1+1}}|bad input}}
cho ra 2{{#iferror:{{#expr:1+Z}}|bad input}}
cho ra bad input{{#iferror:{{#expr:1+1}}}}
cho ra 2{{#iferror:{{#expr:1+Z}}}}
cho raNên:
Hàm này nhận vào một chuỗi, coi nó như một tiêu đề trang, và trả lại một trong hai giá trị tùy thuộc vào trang đó có tồn tại trên wiki nội bộ hay là không.
Hàm sẽ định giá trị là true nếu như trang đó tồn tại, dù chúng có nội dung, là trang trắng rõ ràng (chứa dữ liệu meta như các đường liên kết thể loại hoặc Trợ giúp:Magic words, nhưng nội dung không nhìn thấy được), hoặc là trống như trang đổi hướng. Chỉ đối với những trang liên kết đỏ hàm mới trả về giá trị false, bao gồm cả những trang đã từng tồn tại những hiện tại đã bị xóa.
Hàm sẽ định giá trị true cho các tin nhắn hệ thống được tùy chỉnh hóa, và cho các trang đặc biệt được xác định bằng phần mềm.
#ifexist: được coi là một "hàm phân tích đắt giá", chỉ một số lượng giới hạn hàm này được chèn vào một trang bất kì nào đó (bao gồm cả những hàm bên trong các bản mẫu đã được chèn vào). Khi vượt quá giới hạn này, trang sẽ được xếp vào thể loại Thể loại:Trang có quá nhiều lời gọi hàm cú pháp cần mức độ xử lý cao, và bất cứ hàm #ifexist: sau đó đều sẽ tự động trả về giá trị false, dù trang mục tiêu có tồn tại hay không.
Nếu một trang kiểm tra mục tiêu sử dụng #ifexist:, thì trang đó sẽ xuất hiện trong danh sách Đặc biệt:Liên kết đến đây dành cho trang mục tiêu. Vì vậy nếu mã {{#ifexist:Foo}} được chèn trực tiếp vào trang (Trợ giúp:Tính toán), Đặc biệt:Liên kết đến đây/Foo sẽ liệt kê Trợ giúp:Tính toán.
Trên những wiki sử dụng kho phương tiện chia sẻ, #ifexist: có thể được dùng để kiểm tra một tập tin đã được tải lên kho nhưng chưa lên wiki đó:{{#ifexist: Tập tin:Example.png | tồn tại | không tồn tại }} → không tồn tại
Nếu một trang miêu tả nôi bộ được tạo ra dành cho một tập tin, thì kết quả sẽ là tồn tại cho tất cả các mục kể trên.
Mã ifexpr khi bạn muốn có điều kiện là 0 tương ứng với sai và 1 tương ứng với đúng; thay vì dùng điều kiện chuỗi rỗng tương ứng với sai và không rỗng tương ứng với #if như trên
{{ #ifexpr: <biểu thức> | <chuỗi cho ra khi điều kiện đúng> | <chuỗi cho ra khi điều kiện sai> }}
Ví dụ:
{{#ifexpr: 3 > 1 | 3 > 1 | 3 ≤ 1 }}
cho ra
Lưu ý: Hàm này đã bị tắt và không còn hoạt động.
Hàm rand
cho ra một số ngẫu nhiên đều trong dải được quy định bởi biến.
{{#rand: <giới hạn dưới> | <giới hạn trên> }}
{{ #rel2abs: lối }} {{ #rel2abs: lối | lối gốc }}
Hàm này so sánh một giá trị đầu vào với nhiều giá trị kiểm tra khác nhau, và trả về chuỗi kèm theo giá trị kiểm tra tương ứng nếu như một giá trị trùng khớp được tìm thấy.
{{#switch: chuỗi được so sánh | chuỗi kiểm tra1 = kết quả1 | chuỗi kiểm tra2 = kết quả2 | chuỗi kiểm tra3 = kết quả3 | ... | chuỗi kiểm tran = kết quản | kết quả mặc định }}
kết quả mặc định được trả về nếu như không có chuỗi kiểm tra nào trùng khớp với chuỗi được so sánh:
{{#switch: test | foo = Foo | baz = Baz | Bar }} → Bar
Trong cú pháp này, kết quả mặc định phải là tham số sau cùng và không chứa dấu bằng. Ngoài ra, kết quả mặc định có thể được khai báo một cách rõ ràng bằng một chuỗi kiểm tra là "#default".
{{#switch: chuỗi được so sánh | chuỗi kiểm tra1 = kết quả1 | chuỗi kiểm tra2 = kết quả2 | chuỗi kiểm tra3 = kết quả3 | ... | chuỗi kiểm tran = kết quản | #default = kết quả mặc định }}
Những kết quả mặc định đã khai báo theo cách này có thể được đặt vào bất cứ đâu trong hàm.
Các chuỗi kiểm tra có thể bị lướt qua (fall through), khi chúng ' trả về cùng một chuỗi kết quả. Điều này làm giảm bớt số lầṇ lặp.
{{#switch: chuỗi được so sánh | chuỗi kiểm tra1 = kết quả1 | chuỗi kiểm tra2 | chuỗi kiểm tra3 | chuỗi kiểm tra4 = kết quả2 | chuỗi kiểm tra5 = kết quả3 | chuỗi kiểm tra6 | chuỗi kiểm tra7 = kết quả4 | #default = kết quả mặc định }}
Ở đây tất cả các chuỗi kiểm tra 2, 3, và 4 đều trả về kết quả2; hai chuỗi kiểm tra 6, 7 đều trả về kết quả4
Cũng như với hàm #ifeq, việc so sánh số được thực hiện nếu như chuỗi được so sánh và chuỗi kiểm tra đều là các số, và nếu như là văn bản thì so sánh tính đến sự khác biệt chữ hoa và chữ thường. Chuỗi kiểm tra có thể rỗng:
Một khi đã tìm thấy một sự trùng khớp, những chuỗi kiểm tra sau nó bị lờ đi:
Cảnh báo: Các "chuỗi kiểm tra" không được chứa các dấu bằng. Để làm việc này, chúng ta sẽ tạo một bản mẫu ở {{=}}, trong bản mẫu này chỉ có duy nhất một dấu =. Sau đó, ta dùng bản mẫu vừa tạo như sau:
Chú ý: Kiểm tra Template:NBA color] để biết ví dụ thực tế ứng dụng hàm này. Một ví dụ phức tạp có thể tìm thấy ở Template:Extension.
Nếu kết quả mặc định có dấu =
thì phải bỏ #default:
đằng trước kết quả đó.
Ví dụ:
Hàm #time
để định dạng ngày tháng. Cú pháp hoặc:
{{#time: định dạng }}
hoặc:
{{#time: định dạng | giờ }}
Cú pháp | Miêu tả | Thí dụ |
---|---|---|
d | Số ngày trong tháng, có số 0 đằng trước nếu cần. | 04 |
D | Từ viết tắt của ngày trong tuần, ít có dịch. | Mon |
j | Số ngày trong tháng, không có số 0 đằng trước. | 3 |
l | Tên đầy đủ của ngày trong tuần, ít có dịch. | Monday |
F | Tên tháng đầy đủ, thường được dịch. | January |
m | Số tháng, có số 0 đằng trước nếu cần. | 01 đến 12 |
M | Từ viết tắt của tháng, thường được dịch. | Jan |
n | Số tháng, không có số 0 đằng trước. | 1 đến 12 |
Y | Năm có 4 chữ số. | 2006 |
y | Năm có 2 chữ số. | 06 |
H | Giờ trong ngày, có số 0 đằng trước nếu cần. | 00 đến 23 |
i | Phút, có số 0 đằng trước nếu cần. | 00 đến 59 |
s | Giây, có số 0 đằng trước nếu cần. | 00 đến 59 |
Các mã mở rộng không có trong cú pháp PHP:
Cú pháp | Miêu tả |
---|---|
xn | Cho ra số đằng sau là chữ số Ả Rập trong bộ mã ASCII, chẳng hạn trong tiếng Hindi, {{#time: H, xnH }} cho ra ०६, 06 .
|
xr | Cho ra số đằng sau là chữ số Latinh. |
xg | Cho ra cách sở hữu của tên tháng trong những ngôn ngữ phân biệt cách sở hữu với cách danh sách. |
xx | Chữ "x" như vậy. |
{{#time:j F Y|-14 days}}
cho ra 24 tháng 10 2024
(14 ngày trước đây).{{#time:H:i|+6 hours}}
cho ra 17:55
(6 giờ trễ đối với UTC){{#titleparts:<tên trang>|<số đoạn>}} cho ra số đoạn đoạn của tên trang, chia nhau bằng dấu gạch chéo, bắt đầu từ cấp cao nhất:
{{#titleparts:Wikipedia:Bài viết chọn lọc/2006/11|0}}
cho ra Wikipedia:Bài viết chọn lọc/2006/11
(tên trang đầy đủ){{#titleparts:Wikipedia:Bài viết chọn lọc/2006/11|1}}
cho ra Wikipedia:Bài viết chọn lọc
{{#titleparts:Wikipedia:Bài viết chọn lọc/2006/11|2}}
cho ra Wikipedia:Bài viết chọn lọc/2006
{{#titleparts:Wikipedia:Bài viết chọn lọc/2006/11|3}}
cho ra Wikipedia:Bài viết chọn lọc/2006/11
{{#titleparts:Wikipedia:Bài viết chọn lọc/2006/11|4}}
cho ra Wikipedia:Bài viết chọn lọc/2006/11
{{#titleparts:<tên trang>|<số đoạn>|<số của đoạn đầu>}} cho ra số đoạn đoạn của tên trang, chia nhau bằng dấu gạch chéo, bắt đầu từ đoạn thứ số của đoạn đầu:
{{#titleparts:Wikipedia:Bài viết chọn lọc/2006/11|2|2}}
cho ra 2006/11
(hai đoạn, bắt đầu từ đoạn thứ hai)Tương tự:
{{#titleparts:Wikipedia:Bài viết chọn lọc/2006/11|1|2}}
cho ra 2006
{{#titleparts:Wikipedia:Bài viết chọn lọc/2006/11|1|3}}
cho ra 11
Các hàm có thể được sử dụng kết hợp với nhau trong mã. Cách dùng này hữu ích khi chuỗi cho vào các hàm là kết quả tính toán bởi hàm khác.
Ví dụ mã sau không cho ra kết quả mong muốn:
{{#ifexpr: (1+9)=10|1+9 bằng 10|1+9 không bằng 10}}
do "(1+9)=10", trong điều kiện, được hiểu là một chuỗi chứ không được tự động tính ra kết quả đúng
. Thay vào đó chúng ta cần dùng mã kết hợp:
{{#ifexpr: {{#expr: (1+9)=10}}|1+9 bằng 10|1+9 không bằng 10}}
Các chuỗi cũng có thể là kết quả của các tiêu bản hay biến hệ thống. Ví dụ:
{{#ifexpr: {{#expr: {{THÁNGNÀY}} = 4}} |Tháng này là tháng 4|Tháng này không phải là tháng 4}}
Chúng ta có thể cho hàm tính một lần và cho ra kết quả lưu trong mã nguồn của bài viết bằng cách dùng "subst" giống như với tiêu bản.
Ví dụ mã:
{{subst:#expr: 2+2}}
Cho ra:
Và kết quả 4 cũng là kết quả lưu trong mã nguồn của trang này.
Lưu ý là phần mở rộng này hiện chỉ có dấu thập phân kiểu Mỹ: dấu phẩy dùng để phân tách phần ngàn, còn dấu chấm dùng để phân tách phần thập phân, tức là {{#expr: 22 / 7}}
sẽ trở thành 3.14285714286
, chứ không 3,14285714286
. Có thể sử dụng {{prettynum}} để đổi dấu chấm thành dấu phẩy.
|url=
trống hay bị thiếu (trợ giúp)