2 poin oleh GN⁺ 2025-07-20 | 1 komentar | Bagikan ke WhatsApp
  • fstrings.wtf adalah kuis online untuk menguji pemahaman tentang fitur f-string di Python
  • Terdiri dari pertanyaan yang menguji berbagai perilaku dan pengecualian pada f-string yang berlaku di Python 3.13 versi terbaru
  • Pengguna dapat langsung mengerjakan kuis tanpa proses tambahan
  • Dapat mencoba terlebih dahulu berbagai trik atau perilaku keliru terkait f-string yang sering ditemui dalam praktik kerja

1 komentar

 
GN⁺ 2025-07-20
Opini Hacker News
  • Fitur interpolasi string itu seperti inferensi tipe: begitu sudah terbiasa, rasanya sangat tidak nyaman saat tidak ada. Kalau ditambah sedikit demi sedikit memang terasa makin baik, tapi pada suatu titik kita sadar kode jadi sulit dibaca. Secara umum, di bidang CS orang cenderung ingin terus menambah fitur apa pun, tetapi secara matematis itu kadang sulit. Di sini kita harus menghindari dua-duanya: tidak ada sama sekali dan terlalu banyak. Python dan C# memilih pendekatan yang diserahkan ke selera pengguna. Kita bisa menulis string interpolasi kompleks sepanjang 16 halaman, tetapi rekan kerja mungkin membencinya dan itu bisa gagal di code review. C++ 23 justru bergaya melarang interpolasi sejak awal. Rust memilih opsi yang sangat terbatas, hanya mengizinkan interpolasi identifier, dan ini bisa terasa kurang bagi sebagian orang, atau justru berlebihan bagi yang lain

    • Saya rasa tim Java String Template juga mengalami proses serupa. Sekilas sistemnya tampak sangat keren, tetapi saat benar-benar dicoba terasa arahnya tidak mungkin dijalankan, sehingga akhirnya dihapus total. Mengingat ada permintaan untuk fitur interpolasi dan juga usaha yang sudah dicurahkan sejauh ini, itu keputusan yang cukup menarik. Pada akhirnya mereka menilai tidak bisa ditarik kembali, jadi kembali ke titik awal

    • Kemurnian dan kepraktisan saling bertentangan, dan tiap bahasa akhirnya mencari titik keseimbangan yang berbeda. Karena tidak ada jawaban baku, para pengembang terus berulang kali mengklaim bahwa masing-masing punya standar yang dianggap benar

    • Setiap kali perlu formatting angka atau tanggal di C#, saya selalu membuka dokumentasi dulu. Mini-language itu terlalu buruk, jadi saya sengaja tidak berusaha menghafalnya

    • Tidak sulit mengendalikan interpolasi dengan tepat tanpa harus menyesuaikan contoh yang rumit. Saya tidak merasa perlu menumpuk f-string di dalam f-string, dan satu-satunya format specifier yang sering saya pakai hanyalah :02x

    • Saya sama sekali tidak menganggap pendekatan interpolasi Rust yang terbatas sebagai solusi. Karena hanya bekerja dalam situasi tertentu, saat refactor kode kita harus terus memikirkannya, dan jadinya banyak penyesuaian yang tidak perlu. Menurut saya setidaknya akses field harus diizinkan. Sebaliknya, di Python memang ada kasus aneh seperti di contoh, tetapi pengguna nyata tidak terlalu peduli dan tetap menikmati f-string dengan santai

  • Saya baru belakangan tahu beberapa tips yang dijelaskan di fstring.help, seperti perataan tengah, prefix 0x/0b/0o, tampilan ASCII, dan sebagainya. Saya juga tertarik pada masalah nested f-string, dan sampai 3.11 itu bisa dilakukan asal tanda kutipnya dibedakan. Setahu saya di 3.12 berbagai batasan itu sudah dirapikan. f-string memang nyaman, tetapi harus bolak-balik memakai % formatting lama, cara .format(), dan cara baru yang perbedaannya halus ternyata lebih merepotkan dari dugaan, dan situasi yang tak bisa dihindari cukup sering muncul. Usability memang membaik, tetapi tetap terasa sayang saat masih harus memakai cara lama

    • Soal bagian yang dirapikan di 3.12 ini bisa dicek di dokumentasi resmi

    • Kadang saya melihat rekan kerja atau AI memakai f-string dalam pemanggilan logger, padahal logger itu lazy interpolation dan tampaknya memang sengaja dibuat begitu, jadi agak aneh kenapa fitur bagus itu malah dilewatkan

    • Saya menganggap nested f-string itu semacam masalah trik. Saya tahu ada penambahan yang memungkinkan nesting dengan gaya tanda kutip yang sama, tetapi saya tidak tahu itu versi berapa. Saya masih memakai trik f'{f"{}"}', alasannya karena saya ingin kode saya tetap mendukung versi Python yang sedikit lebih lama

  • Saya baru tahu bahwa di f-string ada fitur tanda sama dengan (=) yang bisa menampilkan ekspresi dan nilainya sekaligus

    • Menurut saya release note Python benar-benar layak dibaca. Selalu ada kejutan yang menyenangkan. Fitur tanda sama dengan ditambahkan di Python 3.8 tautan terkait

    • Sayang sekali PEP dengan fitur serupa untuk keyword argument fungsi tidak diadopsi. Kalau bisa menulis foo(bar=) alih-alih foo(bar=bar), perbedaan dengan kasus sekadar meneruskan argumen akan lebih mudah terlihat, dan akan lebih efisien untuk debugging

    • Menurut saya ini fitur yang memberi terlalu banyak kejutan dibanding nilainya. Kemungkinan perilaku tak terduganya tinggi, jadi saya khawatir jadi sumber bug. Mungkin fungsi standar yang hanya mencetak sebagian dari locals() akan lebih baik

    • Ini pola yang sangat sering dipakai untuk output debugging. Di C++ saya jadi terbiasa menaruh satu ekspresi dalam tanda kutip dan satu lagi tanpa kutip. Jadi lebih mudah dipahami dan enak karena tidak perlu terlalu banyak berpikir

    • Sangat berguna saat debugging dengan print(f)

  • Berbeda dengan URL-nya, saya rasa hampir tidak ada pertanyaan yang benar-benar setingkat WTF. Hanya ada beberapa yang benar-benar mengejutkan, seperti pertanyaan nomor 20 dan 21

    • Saya sangat merasa walrus operator berguna, jadi tidak akan pernah mau melepasnya. Saat pattern matching dan menangani banyak cabang, kodenya jadi jauh lebih rapi. Memang tidak sering dipakai, tetapi sangat efektif dalam situasi yang pas

    • Ini bukan karena walrus operator, melainkan karena cara kerja python string.format dokumentasi terkait

  • Saya belum benar-benar memakai Python secara serius sejak sebelum dan sesudah f-string diperkenalkan, tetapi saya hampir menebak semua aturan sintaksnya dengan benar, dan justru hanya beberapa kali salah soal pengembalian nilai. Saya jadi berpikir mungkin f-string justru bagian Python yang paling tidak WTF

  • Saat membuat library mirip f-string untuk Lua, saya mempelajari cukup banyak sintaks, tetapi f"{...}" dan walrus operator benar-benar di luar dugaan. Meski begitu, ini masih jauh dari tingkat aneh seperti Wat. Library terkait bisa dilihat di sini

    • Library itu benar-benar terlihat keren
  • Saya rasa tidak ada hal yang benar-benar layak disebut WTF. Sebagian besar isinya lebih berkaitan dengan sintaks mini-language str.format() daripada f-string sendiri

    • Memang ada beberapa hal yang cukup WTF, tetapi sebagian besar hanya soal tahu atau tidak tahu sintaks formatting string
  • Fiturnya terasa terlalu banyak dan sudah melewati titik kritis. Satu pengembang tidak perlu memahami semuanya, dan ketika benar-benar perlu dipakai kita tetap harus membuka dokumentasi, jadi tidak efisien. Karena jarang dipakai, sintaksnya mudah lupa, dan mengimplementasikan sendiri fungsi yang sama sering kali jauh lebih cepat, dengan keuntungan tambahan bahwa rekan kerja juga lebih mudah mengustomisasinya. Left padding? Fungsi dua baris sudah cukup. Daripada bingung soal sintaks formatting (apakah n dulu atau < dulu, dan sebagainya), lebih cepat membuatnya sendiri secara ad-hoc

    • Hal seperti left padding juga bisa dipakai di metode string.format, dan cara itu sudah ada sejak Python 2.6 (rilis 2008) lihat dokumentasi. Saya justru merasa sintaks format itu mudah melekat di kepala, jadi berguna. Selain itu, formatting juga terbuka untuk hooking demi kustomisasi

    • Saya ingin memilih titik tengah. Akan paling nyaman jika fungsi pad_left/pad_right juga memungkinkan karakter padding ditentukan langsung lewat keyword argument. Karena ini kebutuhan yang kadang muncul dalam penggunaan sehari-hari, akan bagus kalau ada di standard library. Kalau library bahasa tidak punya hal seperti ini, nanti tiap proyek akan dipenuhi implementasi seadanya yang kualitasnya buruk, seperti di JavaScript. Mungkin saya tidak akan pernah perlu formatting Python seperti ^ atau <>, tetapi di software yang mengutamakan output 'monospace', fitur seperti ini justru bisa sangat penting

    • Kadang ada fitur aneh atau workaround yang dipakai berulang kali dalam satu codebase. Sering kali dibuat sekali, lalu dicopy-paste dan terus dipakai ulang

  • Kalau sintaks seperti ini milik JavaScript, mungkin kebanyakan orang akan mengeluh soal sintaks yang tidak intuitif dan fitur-fitur anehnya

    • Menurut saya inti kuis ini sebenarnya adalah bahwa Python juga punya banyak footgun, tidak kalah dari JavaScript. Mungkin karena di JS postingan 'WTF' seperti ini memang sering muncul

    • Bahkan kalau trik-trik kecilnya disingkirkan, saya tetap merasa JavaScript adalah raja sintaks yang jauh lebih tidak intuitif. Unsur f-string Python memang agak unik, tetapi hanya muncul di situasi tertentu, sedangkan di JS bahkan sebelum membandingkan dua array saja kita keburu menunggu instalasi dependensi

    • Saya ingin bertanya soal template literal JavaScript. Seperti di Python, saya ingin bisa melakukan sesuatu seperti let template = 'hello ${name}'; lalu mengisi nilainya berkali-kali secara dinamis dengan model template.format({ name: 'joe' }), tetapi tampaknya di JS itu tidak memungkinkan. Jadi saya terpaksa membuat sendiri. Saya juga sudah melihat tagged template dan sebagainya, tetapi sulit untuk benar-benar memakai ulang templatenya sendiri. Saya sangat paham keluhan soal sintaks JS dan fitur-fitur anehnya

    • Kalau ini Perl, justru mungkin akan banjir pujian

  • Saya merujuk ke pyformat.info(tautan); memang tidak super detail, tetapi hampir semua contoh yang masuk akal sudah dirangkum di sana