2011-11-23 27 views
1

我們的應用程序的Android部分有一些開發人員積極使用帶有「m *」的類成員變量的前綴。「mThis」的起源是什麼?

什麼是 「mThis」,這是基本的由來:

class SomeClass { 
    private final SomeClass mThis; 
    SomeClass() { 
     mthis = this; 
    } 
} 

和這個符號有什麼看法?

+0

該代碼沒有多大意義;它的唯一好處(AFAIK)稍微簡化了從非靜態內部類訪問封閉類成員的語法。 –

回答

5

其實我猜這個問題更多的是關於m-prefix,而不是將this作爲你自己的領域。

所以,關於前綴,這是a coding convention used by android team:所有成員變量(又名字段)前綴爲「m」。基本上就是這樣。其他的android開發者可能會使用它,因爲他們瀏覽過android源代碼,並認爲它適合在自己的代碼中使用這個約定。

順便說一句,它在一般的java編程中並不常見,我相信常見的java編碼標準通常不鼓勵使用任何類型的前綴。

+0

謝謝,我也想知道「m」代表什麼 – mihail

+0

是的,這更多的是他們使用的約定。它是否與c有關? –

+0

本文是關於Android項目源代碼的,那麼爲什麼開發人員在應用程序開發中使用相同的代碼約定? –

0

我認爲它很方便,當你需要傳遞一個內部類的實例引用,並且你不想使用「完全限定」這個。即SomeClass.this。儘管如此,對我來說似乎是多餘的。

+0

所有其他m-前綴的成員變量是什麼? –

-1

我使用m前綴爲類實例定義全局變量。我不知道爲什麼,但是當我開始查看其他android代碼時,就是這樣。

+1

你的意思是靜態的嗎? –

+0

-1不是全球性的 - 你的意思是成員函數? – Elemental

+0

「類實例的全局變量」 - 不是成員函數,而是成員。 – mihail

0

This article suggests it comes from ancient habits peculiar to the Microsoft ecosystem - 但是,前綴的struct小號成員與它包含在struct的一些速記是從天Ç習慣時標識符,所有標識符(包括結構成員的名字),不得不在前八個字符中是唯一的。與包含結構的名稱的簡寫版的前綴名稱是一種簡單的機制來確保唯一的名字:

struct inode { 
    int number; 
    struct device *dev; 
} 

struct file_descriptor { 
    int number; 
    struct inode *i; 
} 

在這種情況下,number是重複的,非唯一,和麻煩。

的C較新版本做這一個非問題通過將struct名到他們的命名空間,但這種習慣的某些部分一直延續:Linux內核,例如,填充:

struct iattr { 
    unsigned int ia_valid; 
    umode_t  ia_mode; 
    uid_t  ia_uid; 
.... 

struct inode { 
    /* RCU path lookup touches following: */ 
    umode_t   i_mode; 
    uid_t   i_uid; 
    gid_t   i_gid; 
    const struct inode_operations *i_op; 
    struct super_block *i_sb; 
... 

其中超前ia_i_來自struct iattrstruct inode - 這使得它稍微容易閱讀這樣的鏈條:

if (!IS_ERR(cookie) && path->dentry->d_inode->i_op->put_link) 
    path->dentry->d_inode->i_op->put_link(path->dentry, nd, cookie); 

(真的。 fs/namei.c,第821行和第822行在我的源代碼中。)

0

它避免了當您打算使用該對象的成員(其中m是short)變量時意外使用局部變量。

private String name; 
private String mName; 
public void setName(String name) { 
    name = name; //wrong, just set the parameter variable to itself 
    this.name = name; //ok, but has 'this.' which isn't a problem, but some people don't like it 
    mName = name; //simples 
} 
0

m表示成員變量,s表示靜態。這是一個常見的命名約定。但是和中微子一樣,我並沒有太多使用它。如果使用現代IDE,語法顏色編碼會爲您提供相同的信息(實際上更多,因爲無論原始編碼器是否遵循命名約定,它都可以工作)。