Video failed to load

Contoh Blok Kode

1341 words
7 minutes
Contoh Blok Kode
  1. 1Contoh Blok KodeThis article
Contoh Blok Kode

Di sini, kita akan membahas cara menggunakan Expressive Code untuk menampilkan blok kode. Contoh yang disajikan didasarkan pada dokumentasi resmi. Anda dapat merujuknya untuk informasi lebih lanjut.

Kode Ekspresif#

Penyorotan Sintaks#

Penyorotan Sintaks

Penyorotan Sintaks Umum#

console.log('Kode ini memiliki penyorotan sintaks!')

Merender Urutan Escape ANSI#

Terminal window
Warna ANSI standar:
- Warna redup: Hitam Merah Hijau Kuning Biru Magenta Sian Putih
- Warna teks: Hitam Merah Hijau Kuning Biru Magenta Sian Putih
- Warna latar: Hitam Merah Hijau Kuning Biru Magenta Sian Putih
- Warna terbalik: Hitam Merah Hijau Kuning Biru Magenta Sian Putih
Warna 8-bit (contoh warna 160–171):
- Warna redup: 160 161 162 163 164 165 166 167 168 169 170 171
- Warna teks: 160 161 162 163 164 165 166 167 168 169 170 171
- Warna latar: 160 161 162 163 164 165 166 167 168 169 170 171
- Warna terbalik: 160 161 162 163 164 165 166 167 168 169 170 171
Warna 24-bit (RGB penuh):
- Warna redup: Hijau Hutan - RGB(34,139,34) Ungu Rebecca - RGB(102,51,153)
- Warna teks: Hijau Hutan - RGB(34,139,34) Ungu Rebecca - RGB(102,51,153)
- Warna latar: Hijau Hutan - RGB(34,139,34) Ungu Rebecca - RGB(102,51,153)
- Warna terbalik: Hijau Hutan - RGB(34,139,34) Ungu Rebecca - RGB(102,51,153)
Gaya huruf:
- Biasa
- Tebal
- Redup
- Miring
- Garis bawah
- Warna terbalik
- Dicoret

Kerangka Kerja Editor dan Terminal#

Kerangka Kerja Editor dan Terminal

Kerangka Kerja Editor Kode#

my-test-file.js
console.log('Contoh atribut judul')

src/content/index.html
<div>Contoh komentar nama berkas</div>

Kerangka Kerja Terminal#

Terminal window
echo "Kerangka kerja terminal ini tidak memiliki judul"

Contoh Terminal PowerShell
Write-Output "Ini ada judulnya!"

Mengganti jenis bingkai#

echo "Lihat, tidak ada bingkai!"

PowerShell Profile.ps1
# Jika tidak diganti, ini akan menjadi bingkai terminal
function Watch-Tail { Get-Content -Tail 20 -Wait $args }
New-Alias tail Watch-Tail

Penandaan Teks dan Baris#

Penandaan Teks dan Baris

Menandai Seluruh Baris dan Rentang Baris#

// Baris ke-1 - Penentuan posisi berdasarkan nomor baris
// Baris ke-2
// Baris ke-3
// Baris ke-4 - Penentuan posisi berdasarkan nomor baris
// Baris ke-5
// Baris ke-6
// Baris ke-7 - Penentuan posisi berdasarkan rentang "7-8"
// Baris ke-8 - Penentuan posisi berdasarkan rentang "7-8"

Memilih jenis penanda baris (mark, ins, del)#

line-markers.js
function demo() {
console.log('Baris ini ditandai sebagai telah dihapus')
// Baris ini dan baris berikutnya ditandai sebagai telah disisipkan
console.log('Ini adalah baris sisipan kedua')
return 'Baris ini menggunakan jenis penanda default netral'
}

Menambahkan label ke penanda baris#

labeled-line-markers.jsx
<button
role="button"
{...props}
value={value}
className={buttonClassName}
disabled={disabled}
active={active}
>
{children &&
!active &&
(typeof children === 'string' ? <span>{children}</span> : children)}
</button>

Menambahkan label panjang pada baris terpisah#

labeled-line-markers.jsx
<button
role="button"
{...props}
value={value}
className={buttonClassName}
disabled={disabled}
active={active}
>
{children &&
!active &&
(typeof children === 'string' ? <span>{children}</span> : children)}
</button>

Menggunakan sintaks mirip diff#

Baris ini akan ditandai sebagai baris yang ditambahkan
Baris ini akan ditandai sebagai baris yang dihapus
Ini adalah baris biasa

--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
+ini adalah berkas diff yang sebenarnya
-semua isi akan tetap tidak diubah
spasi kosong juga tidak akan dihapus

Menggabungkan penyorotan sintaks dan sintaks mirip diff#

function thisIsJavaScript() {
// Seluruh blok ini akan disorot sebagai JavaScript,
// dan kita masih bisa menambahkan tag diff ke dalamnya!
console.log('Kode lama yang akan dihapus')
console.log('Kode baru yang keren!')
}

Menandai teks tertentu dalam baris#

function demo() {
// Menandai teks apa pun yang diberikan di dalam baris
return 'Mendukung beberapa kecocokan untuk teks yang diberikan';
}

Ekspresi reguler#

console.log('Kata yes dan yep akan ditandai.')

Meng-escape tanda garis miring#

Terminal window
echo "Test" > /home/test.txt

Memilih jenis penanda inline (mark, ins, del)#

function demo() {
console.log('Ini adalah jenis penanda penyisipan dan penghapusan');
// Pernyataan return menggunakan jenis penanda default
return true;
}

Pemisahan Baris Otomatis#

Pemisahan Baris Otomatis

Mengonfigurasi pemisahan baris otomatis untuk setiap blok#

// Contoh pengaktifan pemotongan baris
function getLongString() {
return 'Ini adalah string yang sangat panjang; kecuali wadahnya sangat lebar, kemungkinan besar string ini tidak akan muat di ruang yang tersedia'
}

// Contoh dengan wrap=false
function getLongString() {
return 'Ini adalah string yang sangat panjang; kecuali wadahnya sangat lebar, kemungkinan besar tidak akan muat di ruang yang tersedia'
}

Konfigurasi indentasi saat pemotongan baris#

// Contoh preserveIndent (diaktifkan secara default)
function getLongString() {
return 'Ini adalah string yang sangat panjang; kecuali wadahnya sangat lebar, kemungkinan besar string ini tidak akan muat di ruang yang tersedia'
}

// Contoh preserveIndent=false
function getLongString() {
return 'Ini adalah string yang sangat panjang; kecuali wadahnya sangat lebar, kemungkinan besar string ini tidak akan muat di ruang yang tersedia'
}

Bagian yang Dapat Dilipat#

Bagian yang Dapat Dilipat

5 collapsed lines
// Semua kode pengaturan boilerplate ini akan dilipat
import { someBoilerplateEngine } from '@example/some-boilerplate'
import { evenMoreBoilerplate } from '@example/even-more-boilerplate'
const engine = someBoilerplateEngine(evenMoreBoilerplate())
// Bagian kode ini secara default tetap terlihat
engine.doSomething(1, 2, 3, calcFn)
function calcFn() {
// Anda dapat memiliki beberapa bagian yang dapat dilipat
3 collapsed lines
const a = 1
const b = 2
const c = a + b
// Bagian ini akan tetap terlihat
console.log(`Hasil perhitungan: ${a} + ${b} = ${c}`)
return c
}
4 collapsed lines
// Semua kode hingga akhir blok akan dilipat kembali
engine.closeConnection()
engine.freeMemory()
engine.shutdown({ reason: 'Contoh kode templat berakhir' })

Nomor Baris#

Nomor baris

Menampilkan nomor baris untuk setiap blok#

// Blok kode ini akan menampilkan nomor baris
console.log('Salam dari baris ke-2!')
console.log('Saya ada di baris ke-3')

// Blok ini menonaktifkan nomor baris
console.log('Halo?')
console.log('Maaf, tahukah kamu di baris keberapa aku berada?')

Mengubah nomor baris awal#

console.log('Salam dari baris ke-5!')
console.log('Aku ada di baris ke-6')

Blok Kode Tab#

Disediakan oleh rehype-code-group, sintaksnya sama dengan VitePress code group: gunakan ::: code-group labels=[...] untuk menggabungkan beberapa blok kode menjadi satu grup tab.

[!CATATAN] Label dalam labels=[...] sesuai urutan dengan blok kode dalam grup tersebut, dipisahkan dengan koma; spasi antara ::: dan code-group tidak boleh dihilangkan.

Penggunaan Dasar#

::: kelompok-kode label=[code.js, code.py, code.html]
```js
export function greet(name) {
return `Hello, ${name}!`;
}
```
```py
def greet(name):
return f"Hello, {name}!"
```
```html
<p>Hello, world!</p>
```
:::

Efek rendering:

export function greet(name) {
return `Hello, ${name}!`;
}

Penggunaan Emoji dalam Label#

Label mendukung kode pendek emoji, yang akan secara otomatis diubah menjadi emoji saat proses kompilasi:

::: code-group labels=[:package: npm, :package: pnpm, :yarn: yarn]
Terminal window
npm create astro@latest

Kombinasi dengan Fitur Blok Kode Lainnya#

Di dalam grup ini, blok kode Expressive Code tetap berfungsi seperti biasa; fitur-fitur seperti judul, nomor baris, penanda baris, penyembunyian, dan bingkai terminal dapat digunakan seperti biasa.

astro.config.mjs
export default {
theme: "firefly",
codeGroup: true,
};

Lebih dari sekadar blok kode#

Tab dapat berisi konten apa pun, seperti teks, daftar, atau gambar:

Ini adalah isi paragraf biasa.

Tip

Tab dibuat pada tahap pembangunan, dan secara default item pertama akan terbuka; mendukung navigasi dengan klik mouse dan tombol keyboard ← / → / Home / End.

Penggunaan dalam kotak pemberitahuan (komponen MDX)#

Kotak petunjuk bergaya Docusaurus seperti ::: code-group dan ::: tip semuanya menggunakan sintaks kontainer :::, sedangkan micromark-directive menetapkan bahwa jumlah tanda titik dua pada kontainer induk dan anak harus berbeda. Oleh karena itu, ::: code-group tidak dapat disematkan di dalam kotak petunjuk seperti ::: tip (seluruh blok akan menjadi tidak berfungsi).

Dalam situasi ini, gunakan komponen MDX TabGroup: Komponen MDX tidak diproses melalui direktif :::, sehingga dapat digunakan dengan normal baik di dalam maupun di luar kotak petunjuk, serta memudahkan pengembangan komponen UI tambahan di masa mendatang. Ubah ekstensi artikel menjadi .mdx, lalu impor dari titik masuk terpusat @/components/firefly-mdx (Anda dapat mengimpor beberapa komponen sekaligus):

import { TabGroup } from "@/components/firefly-mdx";
:::tip
<TabGroup labels={["test.js", "test.py"]} client:load>
```js
console.log(1)
```
```py
print("hello world")
```
</TabGroup>
:::
Tip
  • Array labels mendeklarasikan label untuk setiap blok kode, dengan urutan yang sesuai satu per satu
  • Komponen menggunakan client:load untuk mengaktifkan peralihan label

Support & Share

If this article helped you, please share or support!

Sponsor
Contoh Blok Kode
https://blogs.abqory.is-a.dev/posts/code-examples/
Author
Abqarīy - عبقري
Published at
1970-01-03
Profile Image of the Author
Abqarīy - عبقري
As-salāmu‘alaykum, I'm Abqarīy.
Announcement
Welcome to my blog! This is a sample post.
Categories
Tags
Latest Moments
Site Statistics
Posts
13
Categories
3
Tags
20
Total Words
18,181
Running Days
0 days
Last Activity
0 days ago
Site Info
Build Platform
Vercel
Blog Version
Firefly v6.16.8
License
CC BY-NC-SA 4.0
Table of Contents