'Matematiksel' işlevler matematiksel gösterimi izlemeli mi?


11

Sanırım bu soru derhal öznel olarak işaretlenecek, ancak hangisinin daha iyi olduğunu düşünüyorsunuz:

double volume(double pressure, double n_moles, double temperature) {
  return n_moles * BOLTZMANN_CONSTANT * temperature / pressure;
}

veya

double volume(double P, double n, double T) {
  return n*R*T/P;
}

Başka bir deyişle, bazı denklemi uygulayan fonksiyonlar denklemin notasyonunu izlemeli mi yoksa daha ayrıntılı isimler mi kullanmalılar?


3
Bazen bir değişkenin nasıl adlandırılacağını kodlamaya harcadığınızdan daha fazla zaman harcıyor musunuz? ;-)
Tomas

1
İkinci alternatifin iyi olduğunu düşünüyorum. Değişkenleri bir yorumda açıklayabilirim.
Giorgio

Görünüşe göre birisi cevaplar vermek ve herkesin cevaplarını indirmek için uygun gördü. Bu kişi bunu yapma nedenini paylaşmak ister mi? Cevaplar benim için oldukça makul görünüyordu.

Teknik olarak, bunun 'matematiksel' gösterimle ve bir fizikçinin düşündüğü şeyle ilgisi yoktur. Burada aritmetikten başka bir şey yok.
duffymo

2
Fahrenhayt'ta tüm Amerikalıların sıcaklıktan geçtiğini görebiliyorum. Kesinlikle sıcaklık tipi olarak çift kullanmıyorum. Aynı şey muhtemelen baskı için de geçerli. Sanırım türleri isimlerden daha güvenli hale getirmekle ilgilenirim.
Martin York

Yanıtlar:


14

Kimin okuduğuna bağlıdır. Tüm sonsuzluk için, kodunuzu okuyan bir sonraki programcının da termodinamiğe aşina olduğunu garanti ederseniz, evet, kesilmiş sürümü tercih edin.

Kişisel tarzım (kısaltmaları alanda yaygın olarak bilinen) bu değişkenleri kullanmak, ancak açıklamalarını açıklamalarına dahil etmektir.

/* P : Pressure
   V : Volume
   n : Number of moles
   R : Boltzmann constant
   T : Temperature (in K)
*/
double compute_V(double P, double n, double T) {
  return n*R*T/P;
}

5
Amaç ne? Termodinamiği bilmeyen birisinin, değişken isimleri ne olursa olsun, kodu başarıyla sürdürme şansı yoktur.
dsimcha

Bu kesinlikle bilgiyi dahil etmekten daha iyidir, ancak bu noktada, bu isimleri işlevde kullanmanın daha kolay olacağı anlaşılmaktadır. Harfleri kullanırken çok fazla fayda görmüyorum ...
Patrick87

@dsmicha: Evet, PV = nRT çok temel bir örnektir. Gerçek dünyada, yaygın olarak bilinmeyen ve uzun ve kıvrımlı olma eğiliminde olan daha karmaşık işlevler vardır. Bu yüzden kişi sahada eğitilmiş olsa bile, tamamen yabancı bir fonksiyonla karşılaşma şansı yüksektir.

4
@ Patrick87: Harfleri tercih ederim, çünkü orijinal forma çok daha yakın olduğu için kağıda bakarak (veya bellekten) ifadenin doğruluğunu hızlı bir şekilde kontrol edebilirim.

2
+1. Bunu yapmanın en iyi yolu budur. Oldukça temel fizik denklemleri bile Yunan harfleri, kökler, kısmi türevler, operatörler (Laplace, Hamilton), vektörler, tansörler vb. Kullanabilir, böylece genel olarak denklemi okunaklı şekilde okunaklı şekilde temsil etmek mümkün değildir. Olarak standart-as-olası değişken adları / kısaltmaları tutunan (örn GAS_CONSTANTolduğu değil , standart bir değişken adı; her ders kitabı ben kullanımların biliyorum Rbunun için) ve yorumlarda bunları kısaca açıklayan yapılabilecek en iyi şeydir.
Joonas Pulakka

7

Sadece dışarı atarak başka bir seçeneğiniz var:

Volume ComputeVolume(Pressure p, Moles m, Temperature t) { ... }

Bu, F # 'ın ölçü birimleri ile yaptığı şeye benzer ve yanlışlıkla bir basıncı bir sıcaklıkla değiştirmek gibi sorunlardan kaçınma avantajına sahiptir. İmza gibi olduğunda (çift, çift, çift) hangi argümanların nereye gitmesi gerektiğini gözlemek zor


Açıkça söylemek gerekirse, bu tür boyutsal analizleri yapabilen diller var mı? Örneğin, bir Basınç ve Hacim arasındaki ürünün bir enerji birimine atanabileceğini biliyor muyum?
lindelof

Evet, F # bunu Ölçü Birimleri ile yapar. msdn.microsoft.com/tr-tr/library/dd233243.aspx
Mathias

Birimler arasında otomatik dönüşüm desteği olmasa bile, Money sınıfı gibi belirli birimler için özel türler tanımlamak yararlı olabilir. Yanlışlıkla değişken atama ve dönüştürme hatalarını sınırlar ve yeniden düzenlemeye yardımcı olur.
Mathias

Bu, C ++ şablonlarıyla çok sağlam bir şekilde yapılabilir.
kevin cline

@lindelof: Bu işlevselliklerden bazılarını C ++ ile başarabilirsiniztypedef
Jacob

7

Bunu tercih ederim:

/* This function calculates volume using the following formula:
 *
 *     n * R * T
 * v = ---------
 *         P
 */
double volume(double pressure, double n_moles, double temperature) {
    return n_moles * BOLTZMANN_CONSTANT * temperature / pressure;
}

Başka bir deyişle, yorumdaki kodun anlamını İngilizce (ve matematik; yorumlar, gerektiği kadar genişletebilirsiniz) açıklayın, ancak tek kodu okuyan herkesin hala anlayabilmesi için açıklayıcı değişken adları kullanın kolayca - özellikle daha büyük işlevlerle. Değişken adları olarak gerçek kelimeleri kullanmamın başka bir nedeni, işlev bildirimini bir başlık dosyasına kopyalamanız gerektiğinde arabirimin çok daha açık olmasıdır.


2
Ayrıca, yorumda, internette formül hakkında konuşan bir yere bir bağlantı eklemek güzel olurdu (örneğin: en.wikipedia.org/wiki/Ideal_gas_law ).
Chris Shaffer

Bu çok hoş bir yaklaşım ama biraz dağınık. Sadece Wikipedia'ya ideal gaz yasasını tanımlayan bir bağlantı görmeyi tercih edebilirim (bu örnekte).
Patrick87

3

IMHO işlev çok etki alanına özgü ise, çalışmakta olduğunuz sorun etki alanının yerleşik gösterimini kullanmak her zaman daha iyidir. Sorunlu etki alanını anlamayan birinin kodunuzu başarıyla koruma şansı yoktur ve etki alanını bilen biri için, uzun adlar sadece gürültü olacak ve sizin için daha fazla yazacaktır.

OTHO, geleneksel matematiksel gösterimin zaman zaman daha ayrıntılı ve açıklayıcı olmasını diliyorum, ancak matematiksel kodun matematiksel kurallara bağlı kalması gerektiğini düşünüyorum.

Düzenleme: Bu cevap yalnızca formülü matematiksel olarak yazarken gösterimde çok güçlü bir kural varsa geçerlidir. Bir tane yoksa ve bir yorumda değişkenlerin neyi temsil ettiğini açıklamak zorunda kalırsanız bile, okuyucunun etki alanına aşina olduğunu varsayarsak, daha açıklayıcı bir sözleşmenin yan tarafında hata yapmak en iyisidir.


2

Saf görüş, ancak kelimeleri her zaman tek harfli semboller üzerinde kullanın. Eğer kelimeler kullanırsanız, herkes anlayacak; sembol kullanırsanız, sadece konu uzmanlarının takip etmesi garanti edilir. O zaman bile, bazı insanlar aynı fiziksel miktarlar için farklı semboller kullanır. Daha uzun isimleri kullanarak kaybedecek bir şeyiniz yok.


2

Endişeniz netlikten sonra doğruluk olmalıdır (yanlış ancak net kod kolayca düzeltilebilir), bu nedenle işleviniz mümkün olduğunca genel bir kodlayıcı tarafından sürdürülebilmesi için yazılmalıdır. İşlev başlığı açıklamaları formülü ve kullanımını açıklamalı ve içeri / dışarı parametrelerini açıklamalıdır. Daha sonra, işlev gövdesinin nasıl düzenlendiği, başlık açıklamalarıyla tutarlı olduğu sürece çok fazla önemli olmamalıdır.

(Bunun bir tartışma olmadığını biliyorum ama - kişisel tercihim, değişkenlere açık isimler vermektir, ancak bu durumda bir astar 'saf' bir işlev olarak yeterli olabilir; aynı parametrelere sahip bir çağrı aynı şeyi verir sonuç her zaman açıklama gerektiren devletle ilgili bir karmaşıklık olmamalıdır)

  • Boyutsal analizi destekleyen diğer diller, bu C ++ şablonlar ile uygulanabilir, Boost Units kütüphanesi inanıyorum bu yaklaşımı kullanır.

1

İş katmanından kodun ne kadar "uzak" olduğuna bağlıdır ... Furthur, kod yığınına geri döndüğünde, soyut matematiksel işleve doğru ne kadar hedeflenirse uygular, genel olarak kabul edileni taklit etmeye çalışırım matehmatik gösterim ve adlandırma kuralları .. Ön uç veya iş katmanına ne kadar yakın olursam sorun alanında kurulan sözleşmelere o kadar çok uyurum.


1

Bunu bu şekilde düşünmeyi seviyorum - Matematikçiler kısa değişkenlerle yanlış anladılar ve fizikçiler de onu takip etti. Hatalarını neden tekrar ettiniz? Artık daha uzun isimlerin daha açıklayıcı olduğunu ve daha az karışıklık ürettiğini biliyoruz, bu yüzden iyileştirmeye sadık kalın. Daha hafif bir notta, bazen matematikte içine daha uzun değişkenler gizlemeye çalışıyorum, herkesin dehşete düştüğü.


Sen de aşk bu ...

0

Bir programlama denklemi için doğru format, altı ay boyunca görmedikten sonra hala anladığınız formattır.

Geri dönerseniz:

n*R*T/P;

Ve neler olduğunu biliyorsunuz, o zaman muhtemelen iyi. Tipik gelişmiş formüller için ben olmayacağım ben aktif olarak kullanıyorum sürece her parçası olduğunu hatırlıyorum. Benim için:

n_moles * BOLTZMANN_CONSTANT * temperature / pressure;

Denklemin neden olduğu gibi yazıldığını bilmesem bile, her bölümü kolayca anlayabildiğim için çok daha iyi bir denklem biçimidir .


Energy_in_joules = mass_in_kilograms * pow (speed_of_light_in_vacumm_in_metres-per_second, 2) E = mc ^ 2'den daha kolay olduğunu düşünüyorsunuz
Martin Beckett

@Martin Beckett, yayınladığımı gerçekten okudun mu? "Genellikle gelişmiş formlas için ben olmayacağım her bölüm I aktif kullanıyorum sürece olduğunu hatırlıyorum." Kendilerini kamuoyuna itmeyi başaran denklemleri unutacağımı söylemedim. Durumlarda gibi E=m*(c^2)ben olacak altı ay içinde bunu anlamak.
zzzzBov

iyi bilinen klasik denklemler için insanların gösterebilmesi için normal gösterimi kullanmak daha iyidir. Etki alanında ne kullanılırsa, değişkenleri teta veya phi adında bile
Martin Beckett

-1

Bozuk parayı at.

Bazen bir değişkenin nasıl adlandırılacağını kodlamanın kendisine harcadığınızdan daha fazla zaman harcıyor musunuz?


6
Evet, genellikle kodumu kodlamaktan daha fazla zaman harcıyorum ve sorunu anlamak ve işleri düzgün bir şekilde adlandırmakla başlıyor.
Mathias
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.