¿Qué es la nomenclatura húngara? ¿Cuáles son las reglas?
Nomenclatura húngara
La nomenclatura húngara es una convención de nomenclatura de programación. El principio básico es: nombre de variable = atributo + tipo + descripción del objeto. El nombre de cada objeto debe tener un significado claro y puede ser el nombre completo del objeto o una parte del nombre. La denominación debe basarse en el principio de ser fácil de recordar y comprender. Es muy importante garantizar la coherencia de los nombres.
Por ejemplo, si el nombre del formulario es form, se puede abreviar como frm en la nomenclatura húngara. Cuando el nombre de la variable del formulario es Switchboard, el nombre completo de la variable debe ser frmSwitchboard. De esta manera, es fácil saber por el nombre de la variable que Switchboard es un formulario. De manera similar, si el tipo de variable es una etiqueta, debe llamarse lblSwitchboard. Se puede ver que la nomenclatura húngara es muy fácil de recordar y hace que los nombres de las variables sean muy claros y fáciles de entender. Esto mejora la legibilidad del código y facilita la comunicación entre los programadores.
Esta técnica de denominación fue propuesta por un hábil programador de Microsoft, Charles Simonyi, que nació en Hungría. A las personas que trabajaron con él en Microsoft se les enseñó a utilizar esta convención. Todo esto es normal para ellos. Pero a quienes estaban fuera del equipo del proyecto dirigido por Simonyi les resultó extraño. Pensaron que era una forma de expresión rígida, e incluso dijeron que tenía una apariencia tan extraña porque estaba escrito en húngaro. A partir de entonces, este método de denominación se denominó nomenclatura húngara.
Se dice que esta nomenclatura fue inventada por un programador húngaro llamado Charles Simonyi. Posteriormente, permaneció en Microsoft durante varios años, por lo que
Esta nomenclatura fue adoptada por varios productos de Microsoft. y la documentación se difundió por todo el mundo. Hoy en día, la mayoría de los programadores utilizan esta nomenclatura más o menos sin importar qué software utilicen para el desarrollo.
El punto de partida de esta nomenclatura es combinar los nombres de las variables en el orden de: tipo de atributo
descripción del objeto, para que los programadores tengan una comprensión intuitiva del tipo de variable y otros atributos al crear variables, de la siguiente manera
Esta es la convención de nomenclatura de variables HN, algunas de las cuales son mis preferencias personales:
Parte de atributo
Variables globales
g_ p >
Constante
c_
c Variable miembro de clase
m_
Variable estática
s_
Tipo de parte
Puntero
p
Función
fn
No válido
p>v
Manejar
h
Largo
l
Booleano
p>b
Tipo de coma flotante (a veces también denominado archivo)
f
Palabra doble
dw
String
sz
Short
n
Coma flotante de doble precisión
d
Conteo
c (generalmente cnt)
Carácter
ch (generalmente c)
Tipo de entero
i (normalmente n)
byte
por
palabra
w
p>
Tipo real
r
Sin firmar
u
Parte de descripción
Máximo
Máx
Mínimo
Mín
Inicialización
Inicio
Temporal variable
p>
T (o Temp)
Objeto de origen
Src
Objeto de destino
Dest
Aquí hay algunos ejemplos:
hwnd: h es una descripción de tipo, que representa un identificador, wnd es una descripción de objeto variable, que representa una ventana, por lo que hwnd representa una ventana handle;
pfnEatApple: pfn es una descripción de tipo que representa un puntero a una función, EatApple es una descripción de objeto variable, por lo que representa una variable de puntero de función que apunta a la función EatApple.
g_cch: g_ es una descripción de atributo, que representa una variable global, c y ch son el tipo de recuento y el tipo de carácter respectivamente, y juntos representan el tipo de variable
tipo, la descripción del objeto se ignora aquí, por lo que representa una variable global que cuenta caracteres.
Las anteriores son las reglas generales de la nomenclatura HN.
Resumen: nomenclatura húngara
Nomenclatura húngara
Convenciones de nomenclatura para MFC, identificadores, controles y estructuras Variables de muestra de tipo Windows Variables de muestra de clase MFC
HWND hWnd;
HDLG hDlg;
HDC hDC;
HGDIOBJ hGdiObj; ;
HPEN hPen; CPen* pPen;
HBRUSH hBrush; CBrush* pBrush;
HFONT hFont* pFont; HBITMAP hBitmap; CBitmap* pBitmap;
HPALETTE hPaltte; CPalette* pPalette;
HRGN hRgn; CRgn* pRgn; /p>
HWND hCtl; CState* pState;
HWND hCtl; CButton* pButton;
HWND hCtl; CEdit* pEdit; ; CListBox* pListBox;
HWND hCtl; CComboBox* pComboBox;
CScrollBar* pScrollBar;
p>
PUNTO pt; CPoint pt;
Tamaño de tamaño; Tamaño de CSize;
RECT rect; Ejemplo de tipo de prefijo de especificación
Clase o estructura C CDocument, CPrintInfo
m_ variable miembro m_pDoc, m_nCustomers
Ejemplo de descripción de tipo de prefijo de especificación de nomenclatura de variable
ch char carácter de 8 bits chGrade
ch TCHAR carácter de 16 bits chName si _UNICODE está definido
b BOOL booleano bEnable
n int int (su El tamaño depende del sistema operativo) nLength
n UINT valor sin signo (el tamaño depende del sistema operativo) nHeight
w WORD Valor sin signo de 16 bits wPos
l LONG Entero de 32 bits con signo lOffset
dw DWORD Entero de 32 bits sin signo dwRange
p * Puntero pDoc
lp FAR* Puntero lejano lpszName
lpsz LPSTR Puntero de cadena de 32 bits lpszName
lpsz LPCSTR Puntero de cadena constante de 32 bits lpszName
lpsz LPCTSTR Si se define _UNICODE, es un puntero de cadena de 32 bits constante
Puntero de cadena de cantidad lpszName
h identificador de objetos de Windows hWnd
devolución de llamada lpfn Puntero lejano que apunta a la función CALLBACK
Rango de instancias de tipo de símbolo de prefijo
IDR_ Múltiples identificadores de recursos compartidos de diferentes tipos IDR_MAIINFRAME 1~0x6FFF
IDD_ Recurso de diálogo IDD_SPELL_CHECK 1~0x6FFF
HIDD_ Contexto de ayuda del recurso de diálogo HIDD_SPELL_CHECK 0x20001~ 0x26FF
IDB_ Recurso de mapa de bits IDB_COMPANY_LOGO 1~0x6FFF
IDC_ Recurso de cursor IDC_PENCIL 1~0x6FFF
IDI_ Recurso de icono IDI_NOTEPAD 1~0x6FFF
ID_ Comando ID_TOOLS_SPELLING desde el elemento de menú o barra de herramientas 0x8000~0xDFFF
HID_ Contexto de ayuda del comando HID_TOOLS_SPELLING 0x18000~0x1DFFF
IDP_ Mensaje del cuadro de mensaje IDP_INVALID_PARTNO 8~0xDEEF
HIDP_ Cuadro de mensaje Contexto de ayuda HIDP_INVALID_PARTNO 0x30008~0x 3DEFF
IDS_ Recurso de cadena IDS_COPYRIGHT 1~0x7EEF
IDC_ Control en el cuadro de diálogo IDC_RECALC 8~0xDEEF
Tipo de nombre de convención de nomenclatura de macros de Microsoft MFC
_AFXDLL La única versión de biblioteca de vínculos dinámicos (Biblioteca de vínculos dinámicos, DLL)
_ALPHA Solo compila el procesador DEC Alpha
_DEBUG Incluye diagnóstico Versión de depuración
_MBCS Compilar conjunto de caracteres multibyte
_UNICODE Abrir Unicode en una aplicación
Función AFXAPI proporcionada por MFC
CALLBACK Función de devolución de llamada a través del puntero
Biblioteca nomenclatura del identificador valor y significado del identificador
u ANSI (N) o Unicode (U)
d Depuración o lanzamiento: D = depurar; ignorar el identificador para el lanzamiento.
Descripción de la biblioteca de convención de nomenclatura de la versión de la biblioteca estática
Versión de depuración de NAFXCWD.LIB: biblioteca de enlaces estáticos MFC
Versión de lanzamiento de NAFXCW.LIB: biblioteca de enlaces estáticos MFC
p> p>UAFXCWD.LIB Versión de depuración: biblioteca de enlaces estáticos MFC con soporte Unicode
UAFXCW.LIB Versión de lanzamiento: biblioteca de enlaces estáticos MFC con soporte Unicode
Biblioteca de enlaces dinámicos Tipo de nombre de especificación de nomenclatura
_AFXDLL La única versión de biblioteca de vínculos dinámicos (DLL)
Funciones WINAPI proporcionadas por Windows
Nuevo tipo de especificación de nomenclatura en Windows.h Descripción de la definición
WINAPI usa la posición FAR PASCAL en la declaración de API. Si está escribiendo una DLL que tiene un punto de población de API exportado, puede usar este tipo en su propia ubicación de API.
CALLBACK. de FAR PASCAL usado en rutinas de devolución de llamada de aplicaciones, como procedimientos de ventana y diálogo
LPCSTR es el mismo que LPSTR, excepto que LPCSTR se usa para punteros de cadena de solo lectura y su definición es similar (const char FAR * )
UINT Un tipo entero portátil sin signo cuyo tamaño está determinado por el entorno del host (32 bits para Windows NT y Windows 9x es sinónimo de int sin signo
LRESULT); El tipo de valor de retorno del programa de ventana
LPARAM declara el tipo utilizado por lParam, lParam es el cuarto parámetro del programa de ventana
WPARAM declara el tipo utilizado por wParam, wParam es El tercer parámetro del programa de ventana
LPVOID es un tipo de puntero general, igual que (void *), y se puede usar en lugar de LPSTR