Haruskah fungsi 'matematika' mengikuti notasi matematika?


11

Saya kira pertanyaan ini akan segera ditandai sebagai subyektif, tetapi menurut Anda mana yang lebih baik:

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

atau

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

Dengan kata lain, haruskah fungsi yang mengimplementasikan beberapa persamaan mengikuti notasi persamaan itu, atau haruskah mereka menggunakan lebih banyak nama verbose?


3
Apakah Anda kadang-kadang juga menghabiskan lebih banyak waktu untuk berpikir tentang cara memberi nama variabel daripada yang Anda habiskan untuk pengkodean itu sendiri? ;-)
Tomas

1
Saya pikir alternatif kedua adalah OK. Saya akan menjelaskan variabel dalam komentar.
Giorgio

Sepertinya seseorang ingin masuk dan turun memilih suara semua orang. Apakah orang ini peduli untuk membagikan alasannya? Jawabannya tampak masuk akal bagi saya.

Secara teknis, ini tidak ada hubungannya dengan notasi 'matematika' dan segala sesuatu yang berkaitan dengan apa yang akan dipikirkan oleh fisikawan. Tidak ada yang lebih dari aritmatika yang terjadi di sini.
duffymo

2
Saya bisa melihat semua orang Amerika melewati suhu di Fahrenheit. Saya pasti tidak akan menggunakan ganda sebagai tipe untuk suhu. Hal yang sama mungkin berlaku untuk tekanan. Saya pikir saya akan lebih tertarik untuk mendapatkan jenis yang aman daripada nama.
Martin York

Jawaban:


14

Tergantung siapa yang membacanya. Jika Anda bisa menjamin itu untuk selamanya, programmer berikutnya yang membaca kode Anda juga akrab dengan termodinamika, maka ya, pilih versi terpotong.

Gaya pribadi saya adalah menggunakan variabel seperti itu (yang singkatannya biasa dikenal di lapangan), tetapi sertakan uraiannya dalam komentar.

/* 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
Apa gunanya? Seseorang yang tidak grok thermodinamika tidak memiliki peluang berhasil mempertahankan kode tidak peduli apa nama variabelnya.
dsimcha

Ini tentu saja lebih baik daripada tidak termasuk informasi, tetapi pada titik ini, sepertinya akan lebih mudah untuk hanya menggunakan nama-nama itu dalam fungsi. Saya tidak melihat banyak kegunaan dalam menggunakan surat-surat ...
Patrick87

@dsmicha: Ya, PV = nRT adalah contoh yang sangat mendasar. Di dunia nyata, ada fungsi yang lebih rumit yang tidak diketahui secara umum dan cenderung panjang dan berbelit-belit. Jadi, bahkan jika orang itu terlatih di lapangan, ada peluang bagus dia akan menemukan fungsi yang benar-benar asing.

4
@ Patrick87: Saya lebih suka huruf karena saya dapat dengan cepat memeriksa kebenaran ekspresi dengan melihat kertas itu dari (atau dari memori) karena jauh lebih dekat ke bentuk aslinya.

2
+1. Ini adalah cara terbaik untuk melakukannya. Bahkan persamaan fisika yang cukup elementer dapat menggunakan huruf Yunani, akar, turunan parsial, operator (Laplace, Hamilton), vektor, tensor, dll. Sehingga umumnya tidak mungkin untuk merepresentasikan persamaan secara jelas dalam komentar. Menempel sebagai standar-sebagai-mungkin nama variabel / singkatan (misalnya GAS_CONSTANTadalah tidak standar nama variabel; setiap buku teks saya tahu kegunaan Runtuk itu) dan menjelaskan secara singkat mereka dalam komentar adalah hal terbaik yang bisa dilakukan.
Joonas Pulakka

7

Hanya dengan melemparkannya ke luar, Anda memiliki pilihan lain:

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

Ini agak mirip dengan apa yang F # lakukan dengan satuan ukuran, dan memiliki manfaat menghindari masalah seperti mengganti secara tidak sengaja tekanan dengan suhu. Sulit untuk melihat apa argumen harus pergi ke mana tanda tangan itu seperti (ganda, ganda, ganda)


Untuk memperjelas, apakah ada bahasa di luar sana yang dapat melakukan analisis dimensi semacam itu? Apakah Anda tahu bahwa misalnya produk antara Tekanan dan Volume dapat ditetapkan ke unit Energi?
lindelof

Ya, F # melakukan ini, dengan Unit Ukuran. msdn.microsoft.com/en-us/library/dd233243.aspx
Mathias

Bahkan tanpa dukungan untuk konversi otomatis antar unit, mungkin bermanfaat untuk mendefinisikan tipe khusus untuk unit tertentu, seperti kelas Uang. Ini membatasi tugas variabel dan kesalahan konversi yang tidak disengaja, dan membantu dengan refactoring.
Mathias

Ini dapat dilakukan dengan sangat kuat dengan template C ++.
kevin cline

@ lindelof: Anda dapat mencapai beberapa fungsi ini dengan C ++typedef
Jacob

7

Saya lebih memilih ini:

/* 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;
}

Dengan kata lain, jelaskan arti kode dalam komentar dalam bahasa Inggris (dan matematika; itu adalah komentar, Anda dapat mengembangkannya sebanyak yang diperlukan), tetapi gunakan nama variabel deskriptif sehingga siapa pun yang membaca satu-satunya kode masih dapat memahami dengan mudah - terutama dengan fungsi yang lebih besar. Alasan lain mengapa saya menggunakan kata-kata nyata sebagai nama variabel adalah antarmuka jauh lebih jelas jika Anda perlu menyalin deklarasi fungsi ke file header.


2
Selain itu, akan lebih baik dalam komentar untuk memasukkan tautan ke suatu tempat di internet yang berbicara tentang rumus (misalnya: en.wikipedia.org/wiki/Ideal_gas_law ).
Chris Shaffer

Ini adalah pendekatan yang sangat bagus, tetapi sedikit berantakan. Saya mungkin lebih suka melihat tautan ke misalnya Wikipedia yang menggambarkan (dalam hal ini) hukum gas yang ideal.
Patrick87

3

IMHO itu selalu lebih baik untuk menggunakan notasi mapan dari domain masalah Anda bekerja jika fungsinya sangat spesifik domain. Seseorang yang tidak memahami domain masalah tidak memiliki kesempatan untuk berhasil mempertahankan kode Anda, dan bagi seseorang yang akrab dengan domain tersebut, nama-nama panjang hanya akan berisik, serta lebih banyak mengetik untuk Anda.

OTHO, saya akan mengatakan bahwa saya berharap notasi matematika konvensional lebih banyak bertele-tele dan deskriptif, tetapi terlepas dari itu saya pikir kode matematika harus tetap berpegang pada konvensi matematika.

Sunting: Jawaban ini hanya berlaku jika ada konvensi yang sangat kuat tentang notasi saat menulis rumus secara matematis. Jika tidak ada, dan Anda harus menjelaskan apa yang diwakili variabel dalam komentar bahkan dengan asumsi bahwa pembaca sudah mengenal domain, maka yang terbaik adalah berbuat salah di sisi konvensi yang lebih deskriptif.


2

Pendapat murni, tetapi selalu menggunakan kata-kata di atas simbol huruf tunggal. Jika Anda menggunakan kata-kata, semua orang akan mengerti; jika Anda menggunakan simbol, hanya pakar materi pelajaran yang dijamin akan mengikuti. Bahkan kemudian, beberapa orang menggunakan simbol yang berbeda untuk jumlah fisik yang sama. Anda tidak akan rugi dengan menggunakan nama yang lebih panjang.


2

Kekhawatiran Anda harus jelas kemudian kebenaran (kode yang salah tetapi jelas mudah diperbaiki) oleh karena itu fungsi Anda harus ditulis untuk pemeliharaan oleh pembuat kode generik sejauh mungkin. Komentar tajuk fungsi harus menjelaskan rumus dan penggunaannya serta menjelaskan parameter masuk / keluar. Setelah itu bagaimana fungsi tubuh diletakkan-keluar seharusnya tidak terlalu penting asalkan konsisten dengan komentar header.

(Saya tahu ini bukan diskusi tetapi - preferensi pribadi saya adalah untuk memberikan nama eksplisit kepada varaibles meskipun dalam kasus ini satu kalimat bisa mencukupi karena ini merupakan fungsi 'murni'; panggilan dengan parameter yang sama akan menghasilkan yang sama hasil selalu jadi seharusnya tidak ada kompleksitas terkait negara yang membutuhkan penjelasan)

  • Re bahasa lain yang mendukung analisis dimensi, ini dapat diimplementasikan misalnya dalam C + + dengan templat, perpustakaan Unit Boost menggunakan pendekatan ini saya percaya.

1

Tergantung pada seberapa "jauh" dari lapisan bisnis kode ... Semakin jauh dalam tumpukan kode, semakin ditargetkan pada fungsi matematika abstrak adalah mengimplementasikan, semakin saya akan mencoba untuk meniru yang diterima secara umum notasi matehmatical dan konvensi penamaan .. Semakin dekat ke ujung depan atau ke lapisan bisnis, semakin saya akan menyesuaikan diri dengan konvensi yang ditetapkan dalam domain masalah.


1

Saya suka berpikir seperti ini - Matematikawan salah dengan variabel pendek dan fisikawan mengikutinya. Mengapa mengulangi kesalahan mereka? Kita sekarang tahu bahwa nama yang lebih panjang lebih deskriptif dan menghasilkan lebih sedikit kebingungan, jadi tetap dengan perbaikan. Pada nada yang lebih ringan, saya kadang-kadang mencoba memasukkan variabel yang lebih lama ke dalam matematika saya, di mana semua orang terkejut.


Anda akan menyukai ini ...

0

Format yang benar untuk persamaan pemrograman adalah format yang masih Anda pahami setelah tidak melihatnya selama enam bulan.

Jika Anda kembali ke:

n*R*T/P;

Dan Anda tahu apa yang sedang terjadi, maka itu mungkin baik-baik saja. Biasanya untuk formula lanjutan saya tidak akan ingat apa bagian itu kecuali saya aktif menggunakannya. Untuk saya:

n_moles * BOLTZMANN_CONSTANT * temperature / pressure;

adalah format persamaan yang jauh lebih baik secara khusus karena saya dapat dengan mudah memahami setiap bagian, bahkan jika saya tidak selalu tahu mengapa persamaan ditulis sebagaimana adanya.


Anda pikir energy_in_joules = mass_in_kilograms * pow (speed_of_light_in_vacumm_in_metres-per_second, 2) lebih mudah daripada E = mc ^ 2
Martin Beckett

@ Martin Beckett, apakah Anda benar-benar membaca apa yang saya posting? "Biasanya untuk formlas tingkat lanjut, aku tidak akan ingat apa bagian itu kecuali aku aktif menggunakannya." Saya tidak mengatakan saya akan melupakan persamaan yang berhasil mendorong diri mereka sendiri ke dalam pengetahuan publik. Dalam kasus seperti E=m*(c^2)saya akan memahaminya dalam enam bulan.
zzzzBov

untuk persamaan klasik yang terkenal lebih baik menggunakan notasi normal sehingga orang dapat menemukannya. Bahkan sampai sebatas variabel penamaan theta atau phi jika itu yang digunakan dalam domain
Martin Beckett

-1

Lempar koin.

Apakah Anda kadang-kadang juga menghabiskan lebih banyak waktu untuk berpikir tentang cara memberi nama variabel daripada yang Anda habiskan untuk pengkodean itu sendiri?


6
Ya, saya biasanya menghabiskan lebih banyak waktu merancang kode saya daripada mengkodekannya, dan itu dimulai dengan memahami masalah dan memberi nama hal-hal dengan benar.
Mathias
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.