Kısa değişken isimleri için bir bahane var mı?


140

Bu şu anda üzerinde çalıştığım kod temeli ile büyük bir hayal kırıklığı yarattı; değişken isimlerimizin çoğu kısa ve açıklayıcı değildir. Projede kalan tek geliştiriciyim ve çoğunun ne yaptığıyla ilgili belgeler yok, bu yüzden temsil ettiklerini izlemek için fazladan zaman harcamak zorundayım.

Örneğin, bir optik yüzeyin tanımını güncelleyen bazı kodları okuyordum. Başlangıçta ayarlanan değişkenler aşağıdaki gibidir:

double dR, dCV, dK, dDin, dDout, dRin, dRout
dR = Convert.ToDouble(_tblAsphere.Rows[0].ItemArray.GetValue(1));
dCV = convert.ToDouble(_tblAsphere.Rows[1].ItemArray.GetValue(1));
... and so on

Belki de sadece benim, ama esasen neyi temsil ettikleri hakkında hiçbir şey söylemedi, bu da kodun anlaşılmasını zorlaştırdı. Tek bildiğim, belirli bir tablodaki belirli bir satırdaki belirli bir satırdan ayrıştırılan bir değişken olduğuydu. Biraz araştırdıktan sonra ne anlama geldiklerini öğrendim:

dR = radius
dCV = curvature
dK = conic constant
dDin = inner aperture
dDout = outer aperture
dRin = inner radius
dRout = outer radius

Onları esasen orada olanlara göre yeniden adlandırdım. Bazı çizgileri uzatıyor, ancak bunun adil bir işlem olduğunu hissediyorum. Bununla birlikte, bu tür bir isimlendirme şeması, çoğu kod boyunca kullanılmaktadır. Eski sistemler ile çalışarak öğrenen geliştiricilerin bir eseri olup olmadığını ya da arkasında daha derin bir sebep olup olmadığından emin değilim. Değişkenleri bu şekilde adlandırmak için iyi bir neden var mı, yoksa karşılaştığım gibi onları daha açıklayıcı adlara güncellemede haklı mıyım?


98
Bana göre, bu özel durumda, bunlar doğrudan el yazısı matematik formülünden kopyalanan değişken isimleridir.
Dave Nay


35
Kendinizi kısa değişken isimlerinden dolayı matematiksel kodu anlayamazsanız, bunun nedeni matematiği anlamadığınızdan, isimlerin çok kısa olmasından kaynaklanabileceğini unutmayın. Anlamadığınız matematiksel ifadeleri değiştirmek yüksek güvenilirlikli bir işlem değildir. Matematiği anladıktan sonra değişken isimlerinin uzunluğu anlamsızdır. Başkalarına bir iyilik yapın ve öğrenmeniz gerekiyorsa matematiğin ilgili açıklamasına bir açıklama (yorumda) bırakın!
Rex Kerr

3
Eşek Kong almıştır Herhangi tanımlayıcı onaylanmıştır: dK = conic constant.
Thomas Eding

8
Tersine, kişi alanın cehaletinin sözleşmelerinin dikkate alınmamasını haklı gösterip göstermediği sorulabilir. Sonunda, içeriğe bağlıdır.
Daniel C. Sobral

Yanıtlar:


234

Bu değişken adlarının, çeşitli optik problemlerinde çalışan bir fizik ders kitabında bulmayı beklediğiniz kısaltmalara dayandığı anlaşılmaktadır. Bu, kısa değişken isimlerinin genellikle daha uzun değişken isimleri tercih ettiği durumlardan biridir. Rin, Rout, vb. Gibi genel kısaltmaları kullanmaya alışmış fizikçileriniz (veya denklemleri el ile çalıştırmaya alışkın insanlar) varsa, kod, bu kısaltmalar ile daha uzun değişken isimlerden daha açık olacaktır. Ayrıca, kodun aslında hesaplamaları doğru yaptığından emin olmak için kağıtlardan ve ders kitaplarından gelen formülleri kodla karşılaştırmayı çok daha kolaylaştırır.

Optiğe aşina olan herkes derhal Rin gibi bir şeyi iç yarıçap olarak (bir fizik belgesinde, inbir abonelik haline getirilir), dış yarıçapı gibi Rout'u vb. Tanıyacaktır. innerRadiusdaha bilinen terminolojilere benziyorsa , bunu yapmak kodu o kişiye daha az açık hale getirecektir. Tanıdık bir formülün yanlış kodlandığı durumları tespit etmek zorlaşacak ve bir yazıda veya ders kitabında bulabilecekleri denklemlere kodlu denklemleri çevirmeyi zorlaştıracaktır.

Bu koda bakacak tek kişi sizseniz, asla kodla standart bir optik denklem arasında çeviri yapmanıza gerek yoktur ve gelecekte bir fizikçinin gelecekte koduna bakması gerekmeyebilir. yeniden yapılandırıcıya mantıklı olun, çünkü kısaltmaların yararı artık maliyete ağır basmıyor. Eğer bu yeni bir gelişme olsaydı, literatürde bulacağınız kodda aynı kısaltmaları kullanmak neredeyse kesinlikle mantıklı olurdu.


17
Ve eğer kadroda fizikçi ya da matematikçi yoksa? Kod aslında bana bırakıldı. Büyük ölçüde belgesiz. O olurdu daha açıklayıcı isimleri okunması zor?
KChaloux

127
+1 Bir programcının çalıştığı alanı anlamalarını beklemek mantıksız değildir. Öte yandan, matematiksel çalışmalarda değişkenler genellikle uygun bir yerde tanımlanmaktadır. Böyle bir kodda uzun formu gösteren belirgin bir yorum bekliyorum.
Karl Bielefeldt

15
+1: Temel olarak söylediğiniz şey, üzerinde çalıştıkları etki alanını anlayan bir programcının değişken isimlerini anlayacağıdır. Bu daha uzun değişken isimleri ile bile birçok projede aynı olacaktır. Örneğin. columnAskeri bir strateji oyununda adlandırılan bir değişken, büyük olasılıkla grafik yazılımında olduğundan farklı bir şey anlamına gelir.
Steven Evers

23
Tıbbi programlamada genellikle programlama alanına giren terimleri bulacaksınız. Örneğin oftalmoloji ile OU, OD ve OS'yi göreceksiniz. Bunlar, hangi gözün, örneğin ouSphere'in sağ göz için bir gözlük reçetesinin 'küre' bileşenine başvurabileceğini gösterir. Programladığınız iş alanını anlarsanız daha iyi bir programcı olacaksınız.
Bill

11
Makalelerden ve metinlerden denklemler ve formüllerle eşleşen kısa isimleri not etmek için +1. Bunu yaptığımda, orijinal referans malzemesini nerede bulacağınıza dair yorumları da ekliyorum.
Jay Elston

89

Kısa ömürlü değişkenler kısaca adlandırılmalıdır. Örnek olarak, sen yazmazsın for(int arrayCounter = 0; arrayCounter < 10; arrayCounter++) { .... Bunun yerine kullanıyorsunuz for(int i ....

Genel kuralda, değişken kapsamı kısaldıkça adın kısa olması gerektiği söylenebilir. Döngü sayaçları genellikle sadece tek harfleri olduğunu söylüyor i, jve k. Yerel değişkenler gibi bir şey vardır baseOr fromve to. Örneğin küresel değişkenler biraz daha ayrıntılı EntityTablePointer.

Belki de böyle bir kural, üzerinde çalıştığınız kod tabanına uymuyor olabilir. Yine de bazı refactoring yapmak için iyi bir sebep!


14
Dizi indisleri için i, j ve k, en azından Fortran'a geri dönen bir geleneği temsil eder. Kendine saygılı herhangi bir programcı bu sözleşmeye aşina olacaktır.
Dominic Cronin

7
Genellikle yazmıyorum i, j, kben gibi bir şey yazmak personPoso zaman ben üzerinde yineleme ve hangi endeks temsil ettiğimi unutmayacağım çünkü.
Malcolm

18
-1, dizi indeksi yinelemelerinde uzun adlar kullanırım, ancak onlara açık ve anlamsız yerine anlamlı ad veririm arrayCounter. Kodun okunmasını kolaylaştırır ve en azından bunun içine başka bir döngü kopyaladığınızda / yapıştırdığınızda tüm dış tezgahın üzerinde durmanızı önler.
Oleg V. Volkov

3
counter bir isim veya sıfattır. Count bir isim veya bir fiildir. Tabii ki, hala bir şey demezdim arrayCounter, kullanırdım personIndexveya rowya da neye baktığımı açıklarsam.
Wayne Werner

6
Tek bir döngü yaparken, kullanıyorum i. Ama iç içe geçmiş bir döngüye geçer igeçmez terminolojiyi bırakıyorum . Bunun nedeni gerçekten çalışmış olan hangi döngü değişkeni izlemek istiyorum, çünkü, ve ivs jyoğun kodunda oldukça yanıltıcı olabilir. Onu daha okunaklı hale getirmek ve daha fazla boşluk eklemek benim için gerekli.
jcolebrand

48

Koddaki sorun kısa isimler değil, kısaltmaları açıklayabilecek veya değişkenlerin türetildiği formüller hakkında faydalı materyallere işaret edecek bir yorum eksikliğidir.

Kod sadece problemin etki alanına aşinalık olduğunu varsayıyor.

Bu sorun değil, sorunlu alan aşina olması, özellikle kodu "sahip" birinin rolünde, kodu anlamak ve sürdürmek için gerekli olabileceğinden, uzatma adlarını dolaşmaktan ziyade aşinalık edinmenizi sağlar.

Ancak kodun sıçrama tahtası olarak kullanılabilecek bazı ipuçları vermesi iyi olurdu. Bir etki alanı uzmanı bile dKkonik bir sabit olduğunu unutabilir . Bir açıklama bloğuna küçük bir "kopya kağıdı" eklemek, zarar vermez.


Nihayet böyle bir şeyle gitmek sona erdi.
KChaloux

5
Bu yanlış. İnsanları "öğrenmek" için daha fazla zaman harcamak için kodunuzu okumayı zorlaştırmak için hiçbir sebep yoktur. Öğretmiyorsun, sadece insanları yavaşlatıyorsun. Ayrıca, neredeyse hiç bir zaman sonsuza dek tek bir kod sahibi de olmaz. Kısa görüşlü ve bencilsin.
xaxxon

7
Cevabınız değil yanlış olan yorumunuz. Kod, kodun dışında ve kodundan önce gelen bir matematik uygular. Aynı isimlendirmenin yapılması yararlıdır. Şifreyi koruyan birinin muhtemelen matematiğin dışındaki matematiği incelemesi gerekecek ve iki isimlendirme programı arasında harita yapmak zorunda kalmaması o kişiye yardımcı olacaktır.
Kaz

19

Problem alanında iyi bilinen bazı değişkenler için - burada bulunduğunuz gibi - terse değişken isimleri uygundur. Bir oyun üzerinde çalışıyorum, ben oyunumu kişiler pozisyon değişkenleri istiyorum xve ydeğil horizontalPositionve verticalPosition. Endeksleme ötesinde herhangi anlamlara sahip olmamasıdır Aynı şekilde döngü sayaçları, ben görmeyi bekleyebilirsiniz i, j, k.


Ben cv, din ve dout'un hemen belli olmadığını iddia ediyorum (görünüşe göre belli alanlarda kurulmuşlar). Kartezyen koordinatlarının herhangi bir alan için geçerli olduğunu ve orta ve lise öğrencilerine öğretildiğini görerek, x ve y hakkında tartışmıyorum.
KChaloux

1
Ve xve yyaygın olsa da, kaynağın neresinde olduğu gibi dolaylı önemli yönler taşımayın.
Ross Patterson

3
@RossPatterson: Bununla birlikte, bunun sadece önemli olmadığı pek çok bağlam var. Örneğin, aşağıdaki gibi bir döngü düşünün for (x,y) in list_of_coordinates: print x,y: Kökeni kodu anlamaya çalışırken özellikle önemli değil.
Bryan Oakley

16

"Temiz Kod" a göre:

Değişken isimleri:

  • Niyeti açığa çıkarmak
  • Dezenformasyondan kaçının
  • Anlamlı ayrımlar yapın
  • Belirgin olun
  • Aranabilir ol

İstisnalar, i,j,k,m,ndöngüler için kullanılan atasözleridir .

Değişken isimleri, haklı olarak şikayetçi olun, yukarıdakilerin hiçbirini yapmayın. Bu isimler kötü isimlerdir.

Ayrıca, her yöntemin kısa olması gerektiğinden , kapsam veya türün kullanımda olmadığını belirtmek için öneklerin kullanılması gerekir .

Bu isimler daha iyi:

radius
curvature
conicConstant
innerAperture
outerAperture
innerRadius
outerRadius

Bir yorumcu, bunun uzun değişken adları ile çok karmaşık olacağını söylüyor:

görüntü tanımını buraya girin

Kısa değişken isimleri de basit değil:

fnZR = (r^2/fnR(1+Math.sqrt((1+k) * (r^2/R^2)))) + a[1]*r^2 + a[1]*r^4 + a[1]*r^6 ...;

Cevabınız sonunda ismini alana kadar uzun isimler ve ara sonuçlardır :

thisNiceThing =  ( thisOKThing / thisGreatThing ) + thisAwsomeThing;

26
Bu değişkenler büyük olasılıkla koddaki matematiksel formüllerde kullanılır. Matematiksel formülleri kısa değişken isimleriyle okumak çok daha kolaydır. Kodumun çoğunda uzun değişken isimleri kullanıyorum, ancak matematik kısa değişken isimleri ile daha iyi. Rastgele örnek: Bunun uzun değişken isimlerle ne kadar süreceğini düşünün .
MarkJ

@MarkJ Haklısın.
Tulains Córdova

1
Ara sonuçların, programlama hatalarını azaltma ve izole etme avantajı vardır. Beyinlerimiz bir seferde sadece bu kadar çok bilgiyi işleyebilir ve hatayı benzer bir şeyle fnZR = (r^2/fnR(1+Math.sqrt((1+k)) * (r^2/R^2))) + a[1]*r^2 + a[1]*r^4 + a[1]*r^6 ...;
saptamak zordur

1
Ekmeğin ve tereyağın o kadar zor değil.
Radu

1
Mesele tek gömlek yazmak değil. Ama sorun bir şeyi değiştirmek ve başka bir formülü kullanmak gerekiyorsa şimdi hangi anlamaya uzun zaman alır bir sorun olması kitabında ifade eder. Ara sonuçları kullanın, ancak karmaşık matematiğinizi sorun alanına mümkün olduğunca yakın tutun, böylece bir özellik eklemeniz gerekirse gerçekten koruyabilirsiniz. long_nameR
slebetman

8

Eski koddaki değişkenleri yeniden adlandırmamanın iki iyi nedeni vardır.

(1) otomatik bir yeniden ateşleme aracı kullanmıyorsanız, böceklerin ortaya çıkma olasılığı yüksektir. Dolayısıyla, "eğer kırık değilse, düzeltmeyin"

(2) neyin değiştiğini görmek imkansız olan mevcut sürümleri geçmiş sürümlerle karşılaştıracaksınız. Bu, kodun gelecekteki bakımını zorlaştıracaktır.


7
Kesinlikle doğru, ama anlayış eksikliği riski çok daha büyük.
Ross Patterson

2
Eğer aletleriniz bahsettiğiniz gibi basit problemlerle başa çıkamıyorsa, daha büyük problemleriniz var.
AndSoYouCode

Cevaplar (1) Makul otomatik test kapsamı ve aklı başında tutma, (2) Versiyon kontrolü ile yeterlilik.
Adamantish

5

Değişkenleri bu şekilde adlandırmak için iyi bir neden var mı, yoksa karşılaştığım gibi onları daha açıklayıcı adlara güncellemede haklı mıyım?

Daha küçük isimleri kullanmanın nedeni, orijinal programcının onları çalışmayı daha kolay bulmasıdır. Muhtemelen, bunun böyle olacağını bulma ve sahip olduğunuz kişisel tercihlere sahip olmama hakları vardır. Şahsen ben bulurum ...

dDin better than dDinnerAperture
dDout better than dDouterAperture

... eğer onları uzun, karmaşık hesaplamalarda kullanıyor olsaydım. Matematik ifadesi ne kadar küçük olursa, hepsini bir kerede görmek o kadar kolay olur. Durum böyle olsa da, dIn ve dOut kadar iyi olabilirler, bu yüzden kolay bir yazım hatası verebilecek tekrarlayan bir D yoktu.

Öte yandan, çalışmayı zor buluyorsanız, o zaman kendinizi yere sermek ve daha sonra yeniden biçimlendirmek için yeniden adlandırın. Özellikle bu koddan siz sorumlusunuz.


7
En azından kesinlikle Sistem Macar gösteriminden
kurtuluyorum

4
Lider dMacar mı? İçinde olduğu gibi hesap olduğunu düşündüm dx^2/dx = 2x.
Shannon Severance,

7
Ben görseydim dDinnerAperturekendisi tarafından, ben "Akşam Aperture" olarak okumuştu ve "ağzını" demenin komik bir yoldur diye merak ediyorum. Asla "büyük harfle takip eden küçük harf kelimesi" tarzının hayranı olmadım. Bazen çok kafa karıştırıcı.
Darrel Hoffman

2
+1 bu cevap. Uzun matematik formüllerinin kısa değişken isimleriyle okunması çok daha kolaydır. Bu değişkenler büyük olasılıkla koddaki matematiksel formüllerde kullanılır. Matematiksel formülleri kısa değişken isimleriyle okumak çok daha kolaydır. Kodumun çoğunda uzun değişken isimleri kullanıyorum, ancak matematik kısa değişken isimleri ile daha iyi. Rastgele örnek: Bunun uzun değişken isimlerle ne kadar süreceğini düşünün .
MarkJ

1
@ShannonSeverance Size katılıyorum. Bir mühendislik altyapısından geldiğinde, matematiksel anlamda değişken isimler kullanılırken d, hesap için kesinlikle ayrılmalıdır (burada sıkça bahsedildiği gibi).
CodeMonkey

4

Genel olarak, bunun için kuralın, kendi kodunuzda "teknikte uzman" olan kişilerin, bu değişken adının referansını derhal anlayacağını bildiğiniz son derece kısa değişken isimleri kullanabilmeniz gerektiğine inanıyorum. (Her zaman bu durum haricinde her zaman yorumunuz var) ve değişkenlerin yerelleştirilmiş kullanımlarının nasıl kullanıldığı bağlamına göre kolayca ayırt edilebiliyor.

Bunu genişletmek için, değişken isimlerinizi şaşırtmak için kendi yolunuzdan çıkmamanız gerektiği anlamına gelir, ancak değişken isimleriniz için kısaltmalar kullanabilirsiniz, burada yalnızca kodunuzun altında yatan kavramı anlayan kişilerin muhtemel olduğunu bilirsiniz. Yine de okumak için.

Gerçek bir dünya örneğini kullanmak için, son zamanlarda, enlemde olacak bir Javascript sınıfı oluşturuyordum ve size belirli bir tarihte bekleyeceğiniz güneş ışığı miktarını söyledim.

Bu Sundial sınıfını oluşturmak için belki yarım düzine kaynağa, Astronomi Almanacına ve diğer dillerden (PHP, Java, C vb.) Parçacıklara atıfta bulundum.

Bunların hemen hemen hepsinde, benzer öz kısaltmalar kullandılar, ki bunlar yüzünde mutlak hiçbir şey ifade etmiyordu.

K, T, EPS, deltaPsi, eot, LM,RA

Ancak, fizik bilgisine sahipseniz, ne olduklarını anlayabilirsiniz. Başka birinin bu koda dokunmasını beklemem, o yüzden neden ayrıntılı değişken isimleri kullanıyorsunuz?

julianTime, nutationOfEclipticalLongitudeExpressedInDegrees, equationOfTime, longitudeMean, rightAscension.

Ek olarak, çoğu zaman, değişken isimleri geçici olduğunda, yani, yalnızca geçici olarak bir değer tahsis etmek için kullanılırlar, o zaman, özellikle değişkenin içeriği olduğunda, ayrıntılı bir sürümü kullanmak mantıklı değildir. amacını açıklar.


1

Kesinlikle var; Çoğu zaman kısa bir değişken adı gerekli olan tek şey.

Benim durumumda, kıdemli Robotik dersimde ara nokta navigasyonu yapıyorum ve robotlarımızı KISS-C'de programlıyoruz. Mevcut ve hedef (x, y) koordinatları, (x, y) mesafeleri, geçerli ve hedef başlıkları ve ayrıca dönüş açıları için değişkenlere ihtiyacımız var.

Özellikle x ve y koordinatları durumunda, uzun değişken bir isim tamamen gereksizdir ve xC (geçerli x), yD (hedef y) ve pD (hedef phi) gibi isimler yeterlidir ve anlaşılması en kolay olanlardır. bu durumda.

Bunların, programcı protokolünün dikte edeceği gibi 'tanımlayıcı değişken isimleri' olmadığını iddia edebilirsiniz, ancak isimler basit bir koda dayandığından (d = destination, c = current), başlangıçta çok basit bir yorum yapıldı. talep ederler.


0

Değişkenleri bu şekilde adlandırmak için iyi bir neden var mı, yoksa karşılaştığım gibi onları daha açıklayıcı adlara güncellemede haklı mıyım?

Genellikle, karmaşık algoritmalar matlabda (veya benzer bir dilde) uygulanır. Gördüğüm şey insanlar sadece değişken isimlerini devralmak. Bu şekilde uygulamaları karşılaştırmak kolaydır.

Diğer tüm cevaplar neredeyse doğrudur. Bu kısaltmalar, d(örnekte olduğu gibi) başlamadıklarının dışında matematik ve fizikte bulunabilir . D ile başlayan değişkenler genellikle farklılaşmayı temsil edecek şekilde adlandırılır .

Tüm normal kodlama kılavuzları, değişkenleri, adınızı temsil eden ilk harfle (sizin durumunuzdaki gibi) adlandırmamalarını söyler, çünkü tüm modern IDE'lerde koda göz atmak çok kolaydır.


Doğru, bu unsur insanların ne söylediklerinden bağımsız olarak uzaklaşıyordu. Kod tabanında, bulduğum gibi güncellediğim bir tür yarı Macar yarı olmayan şizofreni var.
KChaloux

0

Değişken isimlerinin oldukça kısa olması için bir sebep düşünebilirim.

Kısa isimler, kısa göz açıklığı kullanılarak okunması kolaydır, bu nedenle kısa bir dikkat süresidir.

Örneğin, svdb'nin "veritabanına kaydet" anlamına geldiğine alışınca, kaynak kodu tarama hızı daha da artar çünkü SaveToDatabase (14 karakter, işler daha kötü hale gelirken) yerine hızlıca 4 karakter taramak zorunda kalırım daha karmaşık işlem adları için). Kaynak taramanın büyük bir bölümünü kapladığı için "tarama" "okuma" olmadığını söylüyorum.

Çok miktarda kaynak kodu tararken, bu iyi performans kazanımları sağlayabilir.

Ayrıca, tembel programcının kod yazarken bu kısa isimleri yazmasına yardımcı olur.

Tabii ki, tüm bu "shorthands" kaynak kodunda bazı standart bir yerde listelenmesi bekleniyor.


1
Kelimeleri bir karakter kümesi olarak okumaz, birer şekil olarak okur ve bir bakışta anlama başarısız olduğunda şartlı olarak ayrıntıları çözeriz. Bir kelimenin okunması daha uzun sürmesi gereken uzunluk 4 karakterden çok daha büyüktür ve zihinsel olarak camelCase'i ve değişken ad sözcüklerini sözcük sınırları olarak ayırmanın diğer yollarını zihinsel olarak işleyebiliriz. Bir okuma testinin daha kısa isimlerin okuduğunu anlama hızını arttırdığı iddiası taşıyacağından şüpheliyim; bunun yerine, tanınabilir sözcükleri kaldırarak, yeni sözcükleri özümseyene kadar (sizin belirttiğiniz) hız azalması olacaktır.
gözsüzlük

0

@Zxcdw'nin söylediklerini biraz farklı bir şekilde çerçevelendirmek ve yaklaşma açısından detaylandırmak için:

Fonksiyonlar saf , kısa ve bazı fonksiyonların mükemmel bir şekilde kapsüllenmesi gerekir: Kara kutu mantığı , 40 yıl boyunca dokunulmamış olmasına bakılmaksızın, tasarlandığı işi yapmaya devam edecektir, çünkü arayüzü (giriş ve çıkış) içsellerinden hiçbir şey bilmemeniz bile ses.

Bu yazmak istediğiniz kod türüdür: bu uzun süren ve taşınması kolay bir koddur.

Gerektiğinde, kodu ince ayarlı tutmak için diğer (satır içi) işlev çağrıları dışındaki işlevleri oluşturun .

Şimdi, uygun bir tanımlayıcı işlev adıyla (gerekirse ayrıntılı!), Bu kısaltılmış değişken adlarının kapsamı çok küçük olduğu için yanlış yorumlanma olasılığını en aza indiririz.


-1

Değişken isimleri, programın okunabilirliğine yardımcı olmak için mümkün olduğunca açıklayıcı olmalıdır. Kendin deneyimledin: programın zayıf adlandırma nedeniyle ne yaptığını tanımlamakta bir sürü sorun yaşadın.

Açıklayıcı ad kullanmamak için iyi bir neden yoktur. Size ve projede çalışan / çalışacak olan herkes yardımcı olacaktır. Aslında kısa isimler için geçerli tek bir geçerli kullanım vardır: loop sayaçları.


6
Bunun int dummy_variable_for_for_loops;mümkün olduğunca açıklayıcı olduğuna dikkat edin .
Kaz

4
-1 çünkü bu cevap kafa karıştırıcı. İlk önce iyi bir neden olmadığını söylüyor, daha sonra aslında var olduğunu söyleyerek bitiriyor. Cevap, kendisiyle çelişmemek yerine yeniden ifade edilirse daha iyi olurdu.
Bryan Oakley

Bunu " gerektiği kadar açıklayıcı" olarak okumak için değiştirirdim . Kısa bir isim değişkenin amacını taşırsa, kısa bir isim kullanmak uygun olur .
Maximus Minimus

-1

Elbette bu ne / yorum için ne?

Ödevler, tanımlayıcı olan yorumlara sahipse, her iki dünyanın da en iyisini elde edersiniz: Değişkenin tanımı ve denklemler, ders kitabı ile kolayca karşılaştırılabilir.


-1

Arabirimler için (örneğin, yöntem imzaları, işlev imzaları) Bunu parametre bildirimlerine açıklama ekleyerek çözme eğilimindeyim. C / C ++ için bu .h dosyasını ve uygulamanın kodunu çözer.

Değişken kullanımının bilinmesinin bağlam ve adlandırmada açık olmadığı durumlarda değişken bildirimleri için de aynısını yaparım. (Bu, aynı zamanda güçlü yazmaya sahip olmayan dillerde de geçerlidir.)

Değişken adını tıkamak istemediğimiz birçok şey var. Açı radyan veya derece mi, hassasiyet veya menzil vb. Bazı toleranslar var mı?

Bu konuda dini değilim. Ben sadece netlikle ilgileniyorum ve şimdi unutkanlık kodumu tekrar ziyaret ettiğimde ne olduğumu anladığımdan emin olmak istiyorum. Ve omzumun üzerinden bakan biri, bir şeyin nerede olduğunu, neyin gerekli olduğunu (uygun bakım için son kritik olan) görmek için bilmeleri gerekenlere sahiptir.


-1

Aşırı kısa değişken isimleri için bir bahane var mı?

İlk olarak: E = MC2 gibi formülleri hesaplarken enerji e için bir değişken adlandırmak aşırı kısa isimlendirme DEĞİLDİR . Sembolleri kısa isimler için argüman olarak kullanmak geçerli değildir.

Bu soru benim için oldukça ilginçti ve sadece bir bahane düşünebiliyorum ve bu para.

Örneğin, dosyanın saniyede birçok kez indirileceğini bilen bir müşteri için javascript kullandığınızı varsayalım . Dosya (bayt sayısıyla) olabildiğince küçükse, daha ucuz olur ve kullanıcıların deneyimini daha iyi hale getirir.

(Sadece örneği 'gerçekçi' tutmak için, daha küçük bir araç kullanmanıza izin verilmedi, neden? Güvenlik sorunları, kod tabanına dokunmak için hiçbir dış araç kullanılamaz.)


1
Örneği hala çok gerçekçi değil.
Radu

-1

Diğer cevapların Macar Notasyonu kullanımından bahsetmediğini fark ettim. Bu, uzunluk tartışmasına diktir, ancak genel olarak isimlendirme şemaları ile ilgilidir.

double dR, dCV, dK, dDin, dDout, dRin, dRout

Tüm bu değişkenlerin başında "d", çift olduklarını belirtmek içindir; ama dil zaten bunu zorluyor. Bu isimlerin netliğine rağmen% 50'ye varan fazlalık !

Hataları azaltmak için bir adlandırma kuralı kullanacaksak , dil tarafından kontrol edilmeyen bilgileri kodlamaktan çok daha iyidir . Örneğin, dK + dRuzunluğa boyutsuz bir sayı eklemek anlamsız olsa da, yukarıdaki kodda hiçbir dilden şikayetçi olmaz .

Bu tür hataları önlemenin iyi bir yolu daha güçlü türler kullanmaktır; Bununla birlikte, eğer çiftleri kullanacaksak, daha uygun bir isimlendirme şeması olabilir:

// Dimensions:
// l  = length
// rl = reciprocal length
double lR, rlCV, K, lDin, lDout, lRin, lRout

Dil hala yazmamıza izin verecek K + lR, ancak şimdi isimler bize bunun yanlış olabileceğine dair bir ipucu veriyor.

Bu Macarca Sistemler (genellikle kötü) ve Uygulamalar Macarca (muhtemelen iyi) arasındaki farktır

http://en.wikipedia.org/wiki/Hungarian_notation


1
Aslında, C ++ K + lR birimlerinizi doğru bir şekilde beyan ederseniz şikayet edebilir . SI birimleri ile boyut kontrolleri ve birim dönüşümü yapabilir. Derleme zamanı hatası 3_feet + 2_meterolsa da ekleme işlemi de sorun 2_meter+1_secondolmamalıdır.
MSalters

@ MSalters Bu oldukça güzel; şablon / makro yaklaşımı başıma gelmemişti. Yine de, böyle bir "dil-agnostik" sorusunda, tüm derleme zamanı birim kontrollerini, dilin "tür" olarak
adlandırıp yazmamasına

Şablon, mutlaka. Macro'da gerekli olan matematiği yapamazsınız.
MSalters

-2

Sadece bir komut var ve (genellikle bir ağ üzerinden) bu script üretilen iş önemli olduğunda illegibly kısa değişken adları, modern yazılım mühendisliğinde kabul edilebilir bir durumdur. O zaman bile, betiği kaynak kontrolünde uzun isimlerle tutun ve betiği yapım aşamasında küçültün .


9
Terimlerin etki alanında ortak bilgi olduğu düşünülen matematiksel işlemleri yaparken ne durumda? Örnek: e = mc ^ 2'deki "kütle" yerine M kullanımı
Andy Hunt

2
@andyBursh - Orada dikkatli olurdum. Programcılar genellikle problem alanlarında uzman (hatta uzman) değildir. Bununla birlikte, bu tür bir şey tamam olabilir, özellikle de söz konusu formüle uygun yorum bağlantısı varsa; Bu senaryoyu unutmuştum.
Telastyn

8
@Telastyn - Eğer programcının bir uzman olmadığını varsayarsanız, bu genellikle çok iyi tanımlanmış bir anlama sahip kısaltmalar almaya ve onları en azından biraz belirsiz olan daha uzun isimlere dönüştürmeye yol açar (örneğin, birisi yerel bir değişkeni isimlendirmeye karar verir). radiusiç yarıçapı sakladığında, bunun anlamsız olduğundan daha belirsizdir Rin). Ve sonra uzman olmayan geliştirici, denkliği içeren bir tartışma olduğunda, her zaman işin anladığı isimlendirme ile eşsiz isimlendirmesi arasında çeviri yapmak zorundadır.
Justin Cave

2
Döngü sayacı için "i"? Veya bir koordinat ile uğraşırken "x" ve "y"? Veya kapsamı yalnızca iki kod satırı olan bir değişken mi?
Bryan Oakley

4
Bu cevaba katılmıyorum. Karmaşık matematiksel ifadeler içeren bir program üzerinde çalışan bir programcı , en azından teknik özellikteki formülleri okuyabildi , aksi halde yetkin değillerdi. Bu problemli alan bilgisi değil, temel bir beceridir - matematiksel bir program üzerinde çalışmaya başlamadan önce bazı temel matematik yeterlilikleri. Programcının spesifik formüllere erişimi yoksa, bu başka bir problemdir - ve sadece yorumlarla çözülemez.
MarkJ
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.