[討論] 匈牙利變數命名 Hungarian Notation 語義學
匈牙利命名規則
https://idleloop.com/hungarian/
Charles Simonyi 匈牙利記譜法的創造者 在微軟公司工作時研發出來
您可以找到 2000年~2004年的 Directx SDK source code 符合這種寫作方式
匈牙利人名和大多數其他歐洲人名相比是反過來的,即姓氏在名字的前面。
舉個例子,英語化的名字「Charles Simonyi」在匈牙利語中原本是
「Simonyi Karoly」。 這與中文名字是一樣的
它是一種語義學用在程式寫作上
語義學(英語:semantics)也作語意學,是對指稱、意義或真理的研究;語義學
涉及了語言學、邏輯學、計算機科學、自然語言處理、認知科學、心理學等
諸多領域。
有兩種匈牙利表示法。
系統匈牙利語 和 應用程序匈牙利語
使用應用匈牙利符號來命名語義更好
匈牙利語命名語義分為 3 個部分
1.
種類 從最接近目的名的種類至最遠的目的名種類
在簡短的命名時可以跳過種類
2.
集合的縮寫 或 代表意思的縮寫。
3.
目的縮寫
類似於告訴你的老闆這個命名是什麼用途
範例:
(a)
PT_WRITE_COMMAND is a point structure.
structure T must at fisrt. if point structure then PT at first
PT_WRITE_COMMAND aptwcShare[8];
等同
T_WRITE_COMMAND* aptwcShare[8];
a = array -> type abbreviation of close to far from purpose.
p = point -> type of the middle distance from purpose
t = struct -> type of the far distance from purpose
wc = WRITE_COMMAND -> set abbr.
Share = purpose
(b)
int nPort;
n = number -> meaning abbr.
Port = purpose
(c)
const char aszProtocol[8]
a = array -> type abbreviation close to far from purpose.
sz = string zero ending -> meaning abbr.
Protocol = purpose
const can skip
(d)
class member
int m_iCount;
static variable
int s_iCount;
global variable
int g_iCount;
////////////////////////////
Linus Torvalds linux 創始者的看法
https://www.kernel.org/doc/html/v4.10/process/coding-style.html
Encoding the type of a function into the name (so-called Hungarian notation)
is brain damaged - the compiler knows the types anyway and can check those,
and it only confuses the programmer. No wonder MicroSoft makes buggy programs.
James Ritchie Carroll openPDC 首席設計師 程式說明
https://www.gridprotectionalliance.org/docs/GPA_Coding_Guidelines_2011_03.pdf
Do not use Hungarian notation
Do not abbreviate
Do not prefix enums, classes, or delegates with any letter
各路名人的觀點
https://en.wikipedia.org/wiki/Hungarian_notation#Notable_opinions
Joel Spolsky的觀點 中譯:
https://blog.csdn.net/u010133610/article/details/103462974
它在微軟的歷史
https://en.wikipedia.org/wiki/Talk%3AHungarian_notation
Systems Hungarian was banned from the Windows NT project by its chief
architect Dave Cutler. His decision to do this was correct, in my opinion.
The best counter-example for the usefulness of Hungarian notation is IMHO
provided by Microsoft themselves. From How To Write Unmaintainable Code:
One followon trick in the Hungarian notation is "change the type of a
variable but leave the variable name unchanged". This is almost invariably
done in windows apps with the migration from Win16 WndProc(HWND hW, WORD
wMsg, WORD wParam, LONG lParam) to Win32 WndProc(HWND hW, UINT wMsg, WPARAM
wParam, LPARAM lParam) where the w values hint that they are words, but they
really refer to longs. The real value of this approach comes clear with the
Win64 migration, when the parameters will be 64 bits wide, but the old "w"
and "l" prefixes will remain forever.
https://www.makeuseof.com/what-is-hungarian-notation-and-should-i-use-it/
But you might want to heed the latest advice from Microsoft, the company
where Hungarian Notation originated. Since 2008, their General Naming
Conventions have included this simple note:
[DO NOT use Hungarian notation.] 出處如下
General Naming Conventions
https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/general-naming-conventions
縮址: https://reurl.cc/9V3O08
Word Choice
DO choose easily readable identifier names.
For example, a property named HorizontalAlignment is more English-readable
than AlignmentHorizontal.
DO favor readability over brevity.
The property name CanScrollHorizontally is better than ScrollableX (an
obscure reference to the X-axis).
DO NOT use underscores, hyphens, or any other nonalphanumeric characters.
[DO NOT use Hungarian notation.]
AVOID using identifiers that conflict with keywords of widely used
programming languages.
Hungarian notation 的優點
https://en.wikipedia.org/wiki/Hungarian_notation#Advantages
Hungarian notation 的缺點
https://en.wikipedia.org/wiki/Hungarian_notation#Disadvantages
匈牙利符號的優缺點
https://www.fluentcpp.com/2019/06/21/the-cons-and-cons-of-the-hungarian-notation/
縮址: https://reurl.cc/5MdGaR
//
請問各位的公司還使用 Hungarian Notation?
※ 引述《fatalfeel2 (風在動)》之銘言:
: 程式命名規則 與 Makefile
: 1. 查閱了 ISO 1999 C99, ISO 2011 C++, ISO 2014 C++, ISO 2020 C++,
: https://reurl.cc/gZGz6L
: https://reurl.cc/XLGlq0
: ISO都有基本的命名規則
: 另查閱 微軟 安卓 程式規範
: 微軟 的 命名規則偏向 The Hungarian Naming Convention
: 由2001 制定完整規範, prefix 如ch, sz, p
: https://idleloop.com/hungarian/
: 2. variable prefix naming convention 一定是正確的嗎?
: (a)
: 北美電網程式規範與openPDC 首席設計師 James Ritchie Carroll
: https://www.gridprotectionalliance.org/docs/GPA_Coding_Guidelines_2011_03.pdf
: Page 12 原文貼上
: Do not use Hungarian notation
: Do not abbreviate
: Do not prefix enums, classes, or delegates with any letter
: (b)
: Linux核心的創始者 開源專案Git創始者 Linus Torvalds
: https://www.kernel.org/doc/html/v4.10/process/coding-style.html
: https://slurm.schedmd.com/coding_style.pdf
: 第四章 原文貼上
: Encoding the type of a function into the name (so-called Hungarian notation)
: is brain damaged - the compiler knows the types anyway and can check those,
: and it only confuses the programmer. No wonder MicroSoft makes buggy programs.
: (注意一下這兩位大神coding在意的重點是什麼)
: 3.
: GNU MAKE
: https://www.gnu.org/software/make/manual/make.html
: #dir named with www.gnu.org/software/make/manual/make.html 4.3 16.3 16.5
: SRCDIR = ./source
: OBJDIR = ./obj
: BINDIR = ./bin
: #compile optione with www.gnu.org/software/make/manual/make.html 4.3 16.3 16.5
: $(OBJDIR)/%.o : ./$(SRCDIR)/%.cpp
: $(CXX) -c $(CXXFLAGS) $< -o $@
: #link
: $(TARGET): $(OBJFILES)
: $(CXX) $^ $(LDFLAGS) -o $(BINDIR)/$@
: 有人習慣使用
: $(CXX) $(LDFLAGS) $^ -o $(BINDIR)/$@
: $^ 代表著許多 .o 檔
: $(LDFLAGS)若放在 $^ 前面
: ubuntu 16/18 x86_64 g++ link -lpthread 時會找不到
: 故$(LDFLAGS) 一定要放在 $^ 之後
: #Note: CPPFLAGS at www.gnu.org/software/make/manual/make.html 10.3
: CC
: Program for compiling C programs; default ‘cc’.
: CXX
: Program for compiling C++ programs; default ‘g++’.
: CPPFLAGS
: Extra flags to give to the C preprocessor and programs that use it (the
: C and Fortran compilers).
: CXXFLAGS
: Extra flags to give to the C++ compiler.
: ※ 引述《heaviest (heaviest)》之銘言:
: : 最近開始學C,剛剛把前幾天寫的程式,打開來看
: : 發現變數一時之間完全搞不清楚
: : 明明當初有盡力的取有意義的名稱,然後照著大寫來分開字這樣打
: : 跑去問了學長,他叫我去背單字,他說變數名字取不出來是我單字被太少QQ
: : 請問各位前輩們都怎麼取有意義的名字
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.187.80.32 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1679154803.A.3A8.html
→
03/19 04:45,
1年前
, 1F
03/19 04:45, 1F
→
03/19 04:45,
1年前
, 2F
03/19 04:45, 2F
→
03/19 04:45,
1年前
, 3F
03/19 04:45, 3F
謝謝中譯已補上
※ 編輯: fatalfeel2 (218.187.80.32 臺灣), 03/19/2023 06:40:07
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章