ingilizce fiil; bir şeyin anlamını, sınırlarını ya da niteliklerini kesin biçimde belirlemek. latince definire'den geliyor: de (tam olarak) ve finis (sınır). yani kelimenin kökünde "sınır çizmek" var; bir şeyi tanımlamak, onun nerede bitip başka şeyin nerede başladığını söylemek.
arama motoruna "define" yazan çoğu kişi aslında sözlük anlamı arıyor; google'ın "define:kelime" operatörü de tam bunun için var, aradığın kelimenin tanımını sonuçların en üstünde gösteriyor.
felsefede tanımlamanın üç klasik yolu var. cins ve ayrım (aristoteles): önce üst kategoriyi söyle, sonra onu benzerlerinden ayıran özelliği ekle; "insan, düşünen hayvandır". örnekle tanım: "meyve dediğim şey elma, armut, kiraz gibi şeylerdir". işlevle tanım: "çekiç, çivi çakmaya yarayan alettir". iyi tanım ne çok geniş olur (tanımlanan dışındakileri de kapsamaz) ne çok dar (tanımlananın bir kısmını dışarıda bırakmaz).
pratik faydası: bir tartışmanın uzayıp gitmesinin en yaygın nedeni tarafların aynı kelimeyi farklı tanımlaması. "başarı", "özgürlük", "girişimci" gibi kelimeler konuşulmadan önce tanımlanırsa tartışmanın yarısı bitiyor.
programcı için define, iki ayrı şey demek.
php'de define('AD', deger) fonksiyonu bir sabit tanımlar; sonra kodun her yerinde AD olarak kullanılır ve değiştirilemez. php 5.3 ile gelen const anahtar kelimesi aynı işi derleme zamanında yapıyor; fark şu: define çalışma zamanında ve koşullu tanımlanabilir (if içinde), const ise sınıf içinde ve ad alanlarında çalışır. sabit tanımlı mı diye defined('AD') ile bakılır; bu sitenin kodunda da veritabanı bilgileri tam böyle, define ile tanımlı sabitlerde tutuluyor.
c ve c++'ta #define ise ön işlemci direktifi. derleyici kodu görmeden önce metin değiştirme yapar: #define PI 3.14 yazdıysan koddaki her PI, 3.14 ile değiştirilir. makro da tanımlanabilir: #define KARE(x) ((x)*(x)). klasik tuzak parantezleri unutmak; KARE(a+b) yazınca parantezsiz makro a+b*a+b'ye açılır ve yanlış sonuç verir. ikinci klasik kullanım header guard: #ifndef, #define, #endif üçlüsüyle aynı başlık dosyasının iki kez dahil edilmesi engellenir. modern c++'ta sabitler için constexpr, makrolar için inline fonksiyon öneriliyor; #define yalnızca koşullu derleme için kalıyor.
bir de javascript'in eski modül sistemi amd'de define(['bagimlilik' ], function(){}) çağrısı var; requirejs ile modül tanımlamak için kullanılıyordu, es modülleri (import/export) yaygınlaşınca büyük ölçüde tarihe karıştı.