Sakti (pengaturcaraan)

Dalam konteks pengaturcaraan komputer, **sakti** ialah sebuah istilah tidak rasmi bagi peniskalaan - ia digunakan untuk memerihalkan kod yang mengendalikan tugasan yang rumit sementara menyembunyikan kerumitan tersebut untuk mempersembahkan sebuah antara muka yang ringkas. Istilah ini agak bersifat gurauan dan membawa konotasi yang baik, menandakan bahawa antara muka berkenaan meringkaskan sebuah tugas yang susah dan leceh. Sebagai contoh, mekanisme penjenisan polimorfik dan penutupan di dalam Perl sering kali dipanggil "sakti". Istilah ini menandakan bahawa kerumitan yang disorokkan sekurang-kurangnya dapat difahami secara prinsip, berlawanan dengan sihir yang memperihalkan teknik-teknik misteri yang dengan sengajanya disorok atau teramat sukar untuk difahami.

## Ketaklejasan rujukan
Bagaimanapun, dalam tahun kebelakangan ini, sebuah tafsiran negatif bagi istilah ini semakin mendapat kepopularan. Dalam kegunaan ini, "sakti" merujuk kepada tatacara-tatacara yang membuat pengiraan berdasarkan data yang tidak diberikan secara jelas kepada mereka, dengan mencapai modul-modul lain, kedudukan-kedudukan memori atau pembolehubah sejagat yang mereka tidak sepatutnya capai (dalam kata lain, mereka adalah tidak lejas rujukan). Merujuk kepada model-model senibina perisian terkini, walau apabila menggunakan pengaturcaraan berstruktur, selalunya setiap fungsi lebih digemari dibuat supaya mempunyai tingkah laku yang sama setiap kali argumen-argumen yang sama dihulurkan kepadanya, lantas mengikut salah satu prinsip asas bagi pengaturcaraan kefungsian. Sekiranya sebuah fungsi melanggar peraturan ini, ia sering kali dikatakan mengandungi "sakti".

Kod PHP berikut adalah satu contoh yang diringkaskan untuk sakti negatif:

`
 function Sakti() {
   global $apa_nama;
 
   echo $apa_nama;
 }
 
 $apa_nama = true;
 
 Sakti();
`

Sementara kod di atas adalah jelas dan boleh diseliakan, sekiranya ia dilihat di dalam sebuah projek besar, ia sering kali sukar untuk difahami daripada mana fungsi Sakti() mendapat nilainya. Kod berkenaan lebih digemari ditulis mengikut konsep berikut:

`
 function tiadaSakti($pembolehubahku) {
   echo $pembolehubahku;
 }
 
 $apa_nama = true;
 
 tiadaSakti($apa_nama);
`

## Ketakortogonalan
"Sebarang SV &#91;nilai skalar&#93; boleh jadi sakti, yakni, ia mempunyai ciri-ciri yang sebuah SV biasa tidak ada." — Larry Wall, di dalam Perl 5 halaman panduan *perlguts(1)*
Defini *sakti* atau *kesaktian* ini boleh dikembangkan kepada sebuah jenis data, pecahan kod, katakunci, atau alamat mesin yang mempunyai sifat-sifat yang tidak dikongsi oleh objek-objek serupa sebaliknya. Sakti tersebut mungkin didokumentasikan ataupun tidak.
* Di dalam ISO C, pemegang fail (daripada jenis `file`) yang tidak dapat disalin sepertimana alamatnya berkemungkinan adalah sakti. Yakni, persekitaran masa berjalan mungkin meletakkan pemegang-pemegang fail di dalam sebuah julat alamat yang berkod-keras, dan tidak menyediakan tingkah laku pemegang fail kepada salinan-salinan yang dibuat oleh pengguna di alamat yang lain.
* Di dalam Perl 5, kenyataan `while(<`file-handle`>)` menugaskan baris tersebut membaca daripada fail berkenaan kepada pembolehubah `$_`, dan menilai `"0"` dan rentetan kosong tersebut sebagai benar. Ini tidak berlaku kepada `<`file-handle`>` di tempat lain, atau kepada `while()` dengan sebarang sebutan kawalan lain.
* Satu lagi contoh Perl ialah pengendali swa-naik `++` yang mana menganggap sebuah pembolehubah rentetan sebagai odometer angka abjad apabila ia bukan angka dan tidak perna digunakan di dalam konteks angka. Maka ia mungkin berkelakuan berbeza pada dua pembolehubah yang bersamaan dari segi nilai muka.
* Di dalam Microsoft Excel 97 julat sel `X97:L97` adalah sakti sedang ia membantu membolehkan telur Easter, sebuah pensimulasi penerbangan tersembunyi. 

## Lihat juga
*Nombor sakti (pengaturcaraan)
*Sihir (pengaturcaraan)
*Pengaturcaraan Voodoo

## Rujukan