Bantuan:Ungkapan bersyarat: Perbedaan antara revisi
#ifeq |
#ifexist, #ifexpr |
||
Baris 229: | Baris 229: | ||
* {{ft|#ifeq|<nowiki>teks 1 | teks 2 | kode setara | kode tak setara</nowiki>}} = {{#ifeq: teks 1 | teks 2 | kode setara | kode tak setara }} |
* {{ft|#ifeq|<nowiki>teks 1 | teks 2 | kode setara | kode tak setara</nowiki>}} = {{#ifeq: teks 1 | teks 2 | kode setara | kode tak setara }} |
||
* {{ft|#ifeq|<nowiki>teks 1 | teks 1 | kode setara | kode tak setara</nowiki>}} = {{#ifeq: teks 1 | teks 1 | kode setara | kode tak setara }} |
* {{ft|#ifeq|<nowiki>teks 1 | teks 1 | kode setara | kode tak setara</nowiki>}} = {{#ifeq: teks 1 | teks 1 | kode setara | kode tak setara }} |
||
<h3 style="background: beige">#ifexist:</h3> |
|||
sintaks: |
|||
*: {{ft|#ifexist|<nowiki><nama halaman> | <kode jika ada> | <kode jika tidak ada></nowiki>}} |
|||
Fungsi <code>ifexist</code> menghasilkan salah satu dari dua kemungkinan, tergantung dari apakah nama halaman yang dimasukkan ada atau tidak. |
|||
Contoh: |
|||
<!-- |
|||
The usual case-sensitivity applies: if a page exists then also a non-canonical name for that page gives a positive result. E.g. on Meta: |
|||
:{{ft|#ifexist|<nowiki>Bugs|Foo|RFC 3092</nowiki>}} gives {{#ifexist:Bugs|Foo|RFC 3092}}, because [[Bugs]] exists |
|||
:{{ft|#ifexist|<nowiki>bugs|Foo|RFC 3092</nowiki>}} gives {{#ifexist:bugs|Foo|RFC 3092}}, because [[bugs]] is in canonical form the existing [[Bugs]] |
|||
:{{ft|#ifexist|<nowiki>BUGS|Foo|RFC 3092</nowiki>}} gives {{#ifexist:BUGS|Foo|RFC 3092}} because [[BUGS]] does not exist |
|||
:{{ft|#ifexist|<nowiki>m:Help:Calculation|Yes|Oops</nowiki>}} gives {{#ifexist:m:Help:Calculation|Yes|Oops}} although [[m:Help:Calculation]] exists, because of the interwiki prefix. |
|||
The first parameter is the title to check for, the second is the positive result, and the third, the negative result. If the parameter passed does not produce a valid title object, then the result is negative. |
|||
{{tim|exists}} gives the same result, except that the result is positive for an interwiki link. You can also handle an interwiki link differently with {{tim|if interwiki link}}. |
|||
{{ft|#ifexist}} doesn't handle relative paths (like '../foo'), for that, use it in combination of {{ft|#rel2abs}}. |
|||
The page where <nowiki>{{#ifexist:foo}}</nowiki> appears is listed on Special:Whatlinkshere/foo (as a page which links to foo), see below. |
|||
On Wikimedia wikis there is a maximum for the number of distinct pages for which #ifexist is called on a page. A call of #ifexist after a transclusion of the same page does not require an extra database query and is therefore not counted. A call beyond the maximum returns "false". The html-source of each page shows the counted number of calls, as well as the maximum. The maximum is currently 500, and it has been announced that this will be lowered to 100. [http://en.wiki-indonesia.club/wiki/Wikipedia:Village_pump_(technical)#Abuse_of_#ifexist_parser_function]. |
|||
{{ft|#ifexist}} can correctly check Special pages as well: |
|||
:{{ft|#ifexist|<nowiki>Special:Version|'''works'''|'''doesn't work'''</nowiki>}} gives {{#ifexist:Special:Version|'''works'''|'''doesn't work'''}} |
|||
:{{ft|#ifexist|<nowiki>Special:Nonsense|'''works'''|'''doesn't work'''</nowiki>}} gives {{#ifexist:Special:Nonsense|'''works'''|'''doesn't work'''}} |
|||
--> |
|||
<h3 style="background: beige">#ifexpr:</h3> |
|||
sintaks: |
|||
⚫ | |||
Fungsi <code>ifexpr</code> menghitung suatu operasi (ekspresi) matematika (lihat [[##expr:|expr]]) dan menghasilkan salah satu dari dua kemungkinan, tergantung dari perhitungan tersebut benar atau salah. |
|||
Contoh: |
|||
:{{ft|#ifexpr| 10 > 9<nowiki> | ya | tidak</nowiki>}} {{#ifexpr: 10 > 9|ya|tidak}} -- Karena 10 lebih besar dari 9 |
|||
<!-- |
|||
;At the moment the ''else text'' is also returned for an empty expression: |
|||
:{{ft|#ifexpr|<nowiki>{{ns:0}}|Toast| '''or else'''</nowiki>}} gives {{#ifexpr: {{ns:0}}|Toast|'''or else'''}} |
|||
;Omitting both ''then text'' and ''else text'' gives no output except possibly an error message; this can be used to check the correctness of an expression, or to check the wording of the error message (emulated ''assertions'', forced errors): |
|||
:{{ft|#ifexpr|1/{{ft sub|#ifeq|{{ft sub|ns|4}} <nowiki>| Meta | 1 | 0</nowiki>}}}} {{#ifexpr: 1/{{#ifeq: {{ns:4}}|Meta|1|0}}}} -- no result, hence "<nowiki>1/{{#ifeq: {{ns:4}}|Meta|1|0}}"</nowiki> is a correct expression |
|||
:{{ft|#ifexpr|1/{{ft sub|#ifeq|{{ft sub|ns|0}} <nowiki>| Meta | 1 | 0</nowiki>}}}} {{#ifexpr: 1/{{#ifeq: {{ns:0}}|Meta|1|0}}}} |
|||
:{{ft|#if|{{ft sub|#ifexpr|<nowiki>1=2</nowiki>}}<nowiki> | wrong | correct</nowiki>}} {{#if:{{#ifexpr: 1=2}}|wrong|correct}} -- "1=2" is a correct Boolean expression (not to be confused with one with the value 1, representing "true") |
|||
:{{ft|#if|{{ft sub|#ifexpr|1E2}}<nowiki> | wrong | correct</nowiki>}} {{#if:{{#ifexpr: 1E2}}|wrong|correct}} -- "1E2" is '''now''' also allowed in expressions |
|||
:{{ft|#if|{{ft sub|#ifexpr|1/0}}<nowiki> | wrong | correct</nowiki>}} {{#if:{{#ifexpr: 1/0}}|wrong|correct}} -- "1/0" not allowed |
|||
:{{ft|#if|{{ft sub|#ifexpr|<nowiki>a=b</nowiki>}}<nowiki> | wrong | correct</nowiki>}} {{#if:{{#ifexpr: a=b}}|wrong|correct}} ("a=b" not allowed, to compare strings use #ifeq) |
|||
Example of an application: <nowiki>{{ #if: {{#ifexpr: {{PAGENAME}} }} || </nowiki>''action if PAGENAME is a number (or correct numeric expression)'' }} |
|||
For another application, see also {{tim|evalns}}. |
|||
--> |
|||
==switch== |
==switch== |
||
Baris 264: | Baris 318: | ||
</pre> |
</pre> |
||
Perhatikan bahwa <nilai_1> dan <nilai_2> tidak memiliki tanda "sama dengan". Jika nilai ini yang cocok, hasil yang dikembalikan adalah <hasil_3>. |
Perhatikan bahwa <nilai_1> dan <nilai_2> tidak memiliki tanda "sama dengan". Jika nilai ini yang cocok, hasil yang dikembalikan adalah <hasil_3>. |
||
==ifexpr== |
|||
''Function'' ini memiliki sintaks: |
|||
⚫ | |||
Jika nilai dari eskpresi menghasilkan nol, maka <else> akan dikembalikan, selain itu <then> akan dikembalikan. <ekspresi> sama dengan pemakaian pada ''function'' <tt>expr</tt>. ''Function'' ini merupakan bentuk pendek dari <tt>{{#if:{{#expr}}|..|..}}</tt> |
|||
==ifexists== |
|||
''Function'' ini memiliki sintaks: |
|||
:<tt><nowiki>{{ #ifexists: <judul> | <judul ada> | <judul tidak ada> }}</nowiki></tt> |
|||
Jika suatu halaman berjudul <judul> ada, maka perintah <judul ada> dijalankan, jika tidak maka perintah <judul tidak ada> dijalankan. Function ini mirip dengan templat {{var|exists}} di en.wikipedia. |
|||
==#time== |
==#time== |
Revisi per 26 Juli 2008 22.27
- Lihat versi terbaru di (Inggris)m:Help:ParserFunctions
ParserFunctions (fungsi-fungsi parser) adalah sekumpulan fungsi-fungsi logika dan kalkulasi dalam MediaWiki: mw:Extension:ParserFunctions. Sejak pertengahan April 2006 piranti lunak MediaWiki dengan menggunakan Sintaks-Wiki memperbolehkan digunakannya beberapa konstruksi suatu bahasa pemrograman untuk diterapkan dalam templat.
Konstruksi-konstruksi bahasa program ini seharusnya hanya digunakan secara eksklusif dalam ruang nama templat dan dipertimbangkan saat digunakan. Tidak setiap kemungkinan pemanfaatannya benar-benar berarti atau bermanfaat. Sintaks-sintaks bahasa pemrograman ini masih dapat berubah. Konstruksi pemrograman yang tidak cukup terdokumentasi, akan kembali dihapuskan.
Berbeda dengan fungsi parser biasa yang bisa tidak menggunakan tanda pagar "#", penggunaan ParserFunctions harus memakai tanda pagar di awal fungsi. ParserFunctions memiliki sintaks seperti berikut:
- {{#namafungsi: argumen1 | argumen2 | argumen3..}}
Mohon perhatikan bahwa ekstensi ini harus dipasang secara manual, dan tidak langsung terpasang ketika sebuah MediaWiki baru dipasang. Lihat Istimewa:Versi untuk mengetahui apakan ekstensi ini sudah dipasang atau belum.
Fungsi-fungsi
Sekarang ini, modul ini memiliki sepuluh fungsi yaitu: expr, if, ifeq, ifexist, ifexpr, iferror, switch, time, rel2abs, dan titleparts.
#expr:
sintaks:
- {{ #expr:
ekspresi
}}
- {{ #expr:
Fungsi expr digunakan untuk menghitung perhitungan (ekspresi) matematika didasarkan atas permutasi dari angka-angka (atau variabel/parameter yang diterjemahkan dalam angka-angka) dan operator. Fungsi ini tidak berlaku untuk string. (gunakan ifeq untuk string). Keakuratan dan format angka berbeda-beda tergantung dari sistem operasi peladen.
Dalam perhitungan kompleks, operator dihitung dari kiri ke kanan dengan preseden tertentu:
- pengelompokan (tanda kurung);
- unary (tanda +/- dan NOT);
- perkalian(*, /, div, mod);
- penjumlahan (+, -);
- pembulatan;
- perbandingan (=, !=, <, >, dll.);
- logical AND;
- logical OR.
Jika menghitung sebagai boolean, "0" dianggap FALSE (salah) dan karakter lain selain spasi "TRUE" (benar) (TRUE di boolean dilambangkan sebagai "1").
Macam operator:
Operator | Operasi | Contoh | Hasil |
---|---|---|---|
tidak ada | {{ #expr: 123456789012345 }}
|
1.2345678901234E+14 | |
{{ #expr: 0.000001 }}
|
1.0E-6 | ||
Aritmatika | |||
+ | Unary tanda positif | {{ #expr: +30 * +7 }}
|
210 |
- | Unary tanda negatif | {{ #expr: -30 * -7 }}
|
210 |
* | Perkalian | {{ #expr: 30 * 7 }}
|
210 |
/ div |
Pembagian | {{ #expr: 30 / 7 }}
|
4.2857142857143 4.2857142857143 |
+ | Penjumlahan | {{ #expr: 30 + 7 }}
|
37 |
- | Pengurangan | {{ #expr: 30 - 7 }}
|
23 |
Logika | |||
not | Unary NOT logical NOT |
{{ #expr: not 0 * 7 }}
|
7 7 |
and | Logical AND |
{{ #expr: |
0 |
or | Logical OR |
{{ #expr: |
1 |
Perbandingan | |||
= | Persamaan (numerical & logical) | {{ #expr: 30 = 7 }}
|
0 |
<> != |
Pertidaksamaan, logical exclusive or | {{ #expr: 30 <> 7 }}
|
1 1 |
< | Kurang dari |
{{ #expr: |
0 |
> | Lebih dari |
{{ #expr: |
1 |
<= | Kurang dari sama dengan |
{{ #expr: |
0 |
>= | Lebih dari sama dengan |
{{ #expr: |
1 |
Lain-lain | |||
( ) | Operator pengelompokan | {{ #expr: (30 + 7) * 7 }}
|
259 |
mod | "Modulo" sisa pembagian. Catatan: div dan mod berbeda dari semua bahasa pemrograman. |
{{ #expr: 30 mod 7 }}
|
2 -2 0 |
round | Membulatkan. | {{ #expr: 30 / 7 round 4 }}
|
4.2857 4.3 1900 -3 |
trunc | Menghilangkan desimal. | {{ #expr: trunc1.2 }}
|
1 -1 |
floor | Membulatkan ke intejer terdekat yang sama dengan atau lebih kecil dari angka tersebut. | {{ #expr: floor1.2 }}
|
1 -2 |
ceil | Membulatkan ke intejer terdekat yang sama dengan atau lebih besar dari angka tersebut. | {{ #expr: ceil1.2 }}
|
2 -1 |
#if:
sintaks:
- {{ #if:
<string kondisi> | <kode jika benar>
}}
- {{ #if:
atau bisa juga dilihat dalam pola if-then-else sebagai berikut:
- {{ #if:
<string kondisi> | <kode jika benar> | <kode jika salah>
}}
- {{ #if:
Fungsi if
bekerja seperti if-then-else (jika-maka-jika_tidak). Kondisi yang diberikan akan selalu benar kecuali dikosongkan atau hanya berisi spasi. Kode di argumen kedua akan dijalankan jika nilai fungsinya benar, dan argumen ketiga akan dijalankan jika nilai fungsinya salah (salah satu atau keduanya dapat kosong, dan kode-jika-salah dapat tidak ditulis sama sekali).
Perbandingan yang dilakukan adalah untuk teks, bukan ekspresi matematika, jadi perbandingan matematika akan selalu dianggap benar; Contoh: {{#if: 1 = 2|benar|salah}} akan menghasilkan "benar", karena string "1 = 2" tidak merupakan string kosong. Untuk membandingkan string gunakan ifeq. Sedangkan untuk membandingkan angka, gunakan ifexpr. <--- It is not possible to distinguish between an undefined parameter in a template and a blank one (it is possible with #ifexpr). -->
Fungsi if
digunakan untuk menggantikan pemakaian "hiddenstructure"
dan templat {{qif}}. Templat {{qif}} memiliki tingkat kompleksitas tinggi yang menyebabkan waktu yang lama untuk menghasilkan halaman wiki yang memakai templat tersebut.
Contoh:
- {{ #if:
foo | lakukan jika benar | lakukan jika salah
}}
= lakukan jika benar
- {{ #if:
0 | lakukan jika benar | lakukan jika salah
}}
= lakukan jika benar
- {{ #if:
| lakukan jika benar | lakukan jika salah
}}
= lakukan jika salah
Dalam templat, function if dapat digunakan dalam sintaks berikut:
{{Templat|parameter=sesuatu}} {{Templat}} {{Templat|parameter=}} | | | | | | | | | {{#if: {{{parameter|}}} | parameter didefinisikan | parameter tidak didefinisikan atau kosong }}
#ifeq:
sintaks:
- {{ #ifeq:
<teks 1> | <teks 2> | <kode jika setara>
}}
- {{ #ifeq:
- {{ #ifeq:
<teks 1> | <teks 2> | <kode jika setara> | <kode jika tak setara>
}}
- {{ #ifeq:
Fungsi ifeq
membandingkan dua string atau angka, dan akan menghasilkan argumen ketiga jika nilai fungsinya benar, atau akan menghasilkan argumen keempat jika nilai fungsinya salah (salah satu atau keduanya dapat kosong, dan kode-jika-tak-setara dapat tidak ditulis sama sekali).
Perbandingan string ini sensitif terhadap huruf besar/huruf kecil (contoh, A != a). Jika kedua string dapat dijadikan angka, mereka akan dibandingkan secara numerikal (contoh, 01 = 1); Untuk memaksa perbadingan string, tambahkan karakter non-angka (seperti tanda kutip "
) pada kedua argumen.
Isu: (belum diterjemahkan)
Contoh:
- {{ #ifeq:
teks 1 | teks 2 | kode setara | kode tak setara
}}
= kode tak setara
- {{ #ifeq:
teks 1 | teks 1 | kode setara | kode tak setara
}}
= kode setara
#ifexist:
sintaks:
- {{ #ifexist:
<nama halaman> | <kode jika ada> | <kode jika tidak ada>
}}
- {{ #ifexist:
Fungsi ifexist
menghasilkan salah satu dari dua kemungkinan, tergantung dari apakah nama halaman yang dimasukkan ada atau tidak.
Contoh:
#ifexpr:
sintaks:
- {{ #ifexpr:
<ekspresi> | <maka> | <jika tidak>
}}
- {{ #ifexpr:
Fungsi ifexpr
menghitung suatu operasi (ekspresi) matematika (lihat expr) dan menghasilkan salah satu dari dua kemungkinan, tergantung dari perhitungan tersebut benar atau salah.
Contoh:
- {{ #ifexpr:
10 > 9 | ya | tidak
}}
ya -- Karena 10 lebih besar dari 9
switch
Function ini digunakan untuk membandingkan beberapa kondisi seperti dalam penggunaan nested if. Function ini memiliki sintaks:
{{ #switch: <nilai yang dibandingkan> |<nilai_1> = <hasil_1> |<nilai_2> = <hasil_2> |... |<nilai_n> = <hasil_n> |<hasil_default> }}
switch akan mencari setiap nilai sampai sebuah nilai ditemukan cocok dengan nilai yang dibandingkan dan hasil dari nilai yang cocok itu dikembalikan. Jika tidak ada nilai yang cocok dan nilai terakhir tidak memiliki tanda "sama dengan", maka nilai tersebut yang akan dikembalikan. Nilai default dapat juga didefinisikan memakai tanda "sama dengan" menggunakan #default seperti sintaks berikut:
{{ #switch: <nilai yang dibandingkan> |<nilai_1> = <hasil_1> |<nilai_2> = <hasil_2> |... |<nilai_n> = <hasil_n> |#default = <hasil default> }}
Untuk menghindari mengetik hasil yang sama untuk nilai yang berbeda, dapat menggunakan sintaks berikut:
{{ #switch: <nilai yang dibandingkan> |<nilai_1> = |<nilai_2> = |<nilai_3> = <hasil_3> |... |<nilai_n> = <hasil_n> |<hasil default> }}
Perhatikan bahwa <nilai_1> dan <nilai_2> tidak memiliki tanda "sama dengan". Jika nilai ini yang cocok, hasil yang dikembalikan adalah <hasil_3>.
#time
Function ini memiliki sintaks:
- {{ #time: format }}
atau
- {{ #time: format | waktu }}
Fungsi "time" digunakan untuk menampilkan waktu (jam/tanggal) dalam berbagai format. Jika waktu tidak diberikan, fungsi "time" akan memakai waktu saat artikel yang bersangkutan dikonversi ke HTML. Dikarenakan adanya cache, halaman yang memakai fungsi ini perlu untuk diperbaharui dengan purge atau null edit.
Kode | Deskripsi | Contoh |
---|---|---|
d | Hari, dengan awalan nol jika diperlukan. | 21 |
D | Tiga huruf sebagai singkatan nama hari. | Rab |
j | Hari, tanpa awalan nol. | 21 |
l | Nama hari. | Rabu |
F | Nama bulan. | Agustus |
m | Bulan, dengan awalan nol jika diperlukan. | 08 |
M | Tiga huruf singkatan nama bulan. | Ags |
n | Bulan, tanpa awalan nol. | 8 |
Y | Empat digit tahun. | 2024 |
y | Dua digit tahun. | 24 |
H | Jam, dengan awalan nol jika diperlukan. | 18 |
i | Menit, dengan awalan nol jika diperlukan. | 25 |
s | Detik, dengan awalan nol jika diperlukan. | 28 |
Ketentuan-ketentuan yang berlaku:
- Karakter format yang tidak dikenal akan ditampilkan apa adanya.
- Karakter-karakter dalam tanda kutip akan ditampilkan apa adanya tanpa diformat, contoh:
- {{ #time: "Sekarang bulan " F}} → Sekarang bulan Januari
- {{ #time:i's"}} → 20'11"
- Karakter escape backslash seperti dalam fungsi date() di PHP's juga dikenal. \H menghasilkan huruf H, \" menghasilkan ".
Kode-kode format tambahan mungkin akan ditambahkan di masa mendatang. Fungsi "time" juga mengenal format waktu relatif dan absolut seperti "11 Desember" dan atau "+10 hours" yang bisa digunakan dalam konversi zona waktu.
Jika nilai dari eskpresi menghasilkan nol, maka <else> akan dikembalikan, selain itu <then> akan dikembalikan. <ekspresi> sama dengan pemakaian pada function expr. Function ini merupakan bentuk pendek dari ..
Contoh
- {{#time:j F Y|-14 days}} menghasilkan 7 Agustus 2024 (14 hari yang lalu)
- {{#time:H:i|+7 hours}} menghasilkan 01:25 (7 jam selisih dari UTC, =WIB)
- {{#time:H:i|8:15 +6 hours}} menghasilkan 14:15
rel2abs
Function ini memiliki sintaks:
- {{ #rel2abs: <path> }}
- {{ #rel2abs: <path> | <base path> }}
{{#rel2abs}} melakukan konversi sebuah relative path ke absolute path.
Contoh:
- Di dalam Bantuan:Foo/bar, {{#rel2abs|../baz}} menghasilkan Bantuan:Foo/baz
- Di dalam Bantuan:Foo, {{#rel2abs|../baz}} menghasilkan baz
- Di dalam Bantuan:Foo, {{#rel2abs|../../baz}} menghasilkan Error: Invalid depth in path: "Help:Foo/../../baz" (tried to access a node above the root node)"
- {{#rel2abs|../baz | Bantuan:Bar/foo}} menghasilkan Bantuan:Bar/baz
- {{#rel2abs|Bantuan:Foo/bar/../baz}} menghasilkan Bantuan:Foo/baz
titleparts
Function ini memiliki sintaks:
- {{ #titleparts: judul halaman | tingkat }}
Fungsi ini akan mengambalikan bagian dari suatu judul halaman sesuai tingkat yang diisi pada parameter. Contoh:
- {{#titleparts:ABC/DEF/GHI|1}} menghasilkan ABC
- {{#titleparts:ABC/DEF/GHI|2}} menghasilkan ABC/DEF
- {{#titleparts:ABC/DEF/GHI|3}} menghasilkan ABC/DEF/GHI