Alfabetik Sıralama Ne Zaman İşe Yarar, Ne Zaman Yaramaz
Alfabetik sıralama çoğu arayüzde bir karar değil, karar vermemenin adıdır. Kullanıcı aradığı şeyin tam adını biliyorsa iyi çalışır; bilmiyorsa a'dan z'ye dizmek onu hiçbir yere götürmez. Türkçe listelerde ayrıca sessizce bozulur, çünkü sıralamayı yapan varsayılan ayarların çoğu Türkçe alfabeyi bilmez.
Önce hakkını verelim: alfabetik sıralamanın doğru olduğu yer
Dar ama gerçek bir durum var. Kullanıcı seçeceği şeyin adını kesin biliyor, liste uzun ve öğeler arasında eş anlamlılık yok. Ülke listesi, il listesi, banka listesi. Burada alfabetik dizilim en hızlı erişimi verir, çünkü kullanıcı listeyi taramaz, doğrudan harfe atlar.
Sorun bu durumun ne kadar dar olduğunun fark edilmemesi. Aynı mantık kategori menüsüne, ayar başlıklarına, rapor türlerine de uygulanıyor ve orada karşılığı yok.
Adı bilinmiyorsa alfabe bir şey söylemez
Kullanıcı “kargo iadesi mi, sipariş iptali mi” diye düşünüyorsa listedeki sıralama ona yardım etmiyor demektir. Alfabetik düzen, öğeler arasındaki hiçbir ilişkiyi taşımaz: benzer iki işlem listenin iki ucuna düşer, birbiriyle ilgisiz iki başlık yan yana gelir.
Bu tür listelerde gruplama sıralamadan daha çok iş görür. Beş başlığı ikişerli üç kümeye ayırıp küme başlıklarını yazmak, otuz maddelik alfabetik bir dökümden daha hızlı okunur.
Türkçede alfabetik sıralama sandığınız gibi çalışmıyor
Burası genelde atlanıyor. “Alfabetik sırala” dediğinizde sıralamayı yapan katman, veritabanının collation ayarı ya da dilin varsayılan karşılaştırma fonksiyonudur ve ikisi de öntanımlı halde Türkçeyi bilmez.
Sonuç şu: bayt sırasına dayalı bir sıralamada Ç harfi C'den sonra değil, tüm ASCII harflerinin arkasına düşer. Bir il listesini bu şekilde sıralarsanız Çanakkale, Şanlıurfa, İzmir ve Iğdır listenin sonunda kümelenir. Kullanıcı Ç'yi C'den hemen sonra arar, orada bulamaz, listede il yok sanır.
Çözüm sıralama yöntemini değiştirmek değil, sıralamayı dile bağlamak. MySQL tarafında sütunun collation'ını Türkçe kurallarını bilen bir değere çekmek, PHP tarafında sort() yerine Collator sınıfını tr_TR ile kullanmak yeterli. İki satırlık iş, ama listeyi ekranda gözle kontrol etmediğiniz sürece hiç fark edilmiyor, çünkü hata bir istisna fırlatmıyor, sadece yanlış sıra üretiyor.
Doğal sırası olan veride alfabe bilgi siler
Aylar Ocak'ta başlar, Aralık'ta biter. Bedenler küçükten büyüğe gider. Yaş grupları, eğitim seviyeleri, sipariş durumları da öyle. Bu verilerde alfabetik sıralama sadece işe yaramaz değil, veride zaten var olan bilgiyi ekrandan siler.
Kontrol için basit bir soru yeterli: bu listeyi kullanıcı tek tek okuyup mu seçecek, yoksa aradığı öğenin listede nerede olacağını baştan tahmin edebiliyor mu? İkinci durumda tahminin dayandığı düzen neyse sıralama o olmalı.
Popülerliğe göre sıralamaya neden temkinli yaklaşmalı
Sık kullanılanı öne almak makul görünür, panellerde ve dashboard'larda sıkça önerilir. Ama bu sıralama kendi kendini besler: üste çıkan öğe daha çok tıklanır, daha çok tıklandığı için üstte kalır. Bir süre sonra liste, kullanıcıların neye ihtiyacı olduğunu değil, üç ay önce neyin üstte olduğunu gösterir. Yeni eklenen özellik ise hiç görünmez, çünkü görünmediği için tıklanmaz.
Sabit mantıksal sıralamayı popülerliğe dayalı sıralamadan daha güvenilir bulurum. Kullanım verisiyle sıralanan bir listede ne göreceğinizi önceden bilemezsiniz, dolayısıyla test de edemezsiniz; sabit düzende hem sıra bellidir hem de yanlışsa nedeni bellidir. Kullanım verisini sıralamayı değil, listeden neyin çıkarılacağını belirlemekte kullanmak daha sağlam sonuç veriyor.
Uzun listenin çözümü sıralama değil
Yüzlerce öğelik bir katalogda hangi sıralamayı seçerseniz seçin kullanıcı listeyi baştan sona okumayacak. Burada asıl araç filtrelemedir: renk, beden, fiyat aralığı, tarih. Kullanıcı kendi kriterini uygulayıp listeyi otuz öğeye indirdiğinde sıralama sorusu da kendiliğinden küçülür.
Sıralama seçeneğini kullanıcıya bırakmak da bir yol, ama varsayılanı doğru seçmek şartıyla. Kullanıcıların çoğu varsayılanı değiştirmez, o yüzden “nasılsa değiştirebilir” gerekçesiyle kötü bir varsayılanı savunmak anlamsız.