Godot: GDScriptぎプナイベãƒŧト変数ぞたはé–ĸ数

äŊœæˆæ—Ĩ 2018åš´04月25æ—Ĩ  Âˇ  47ã‚ŗãƒĄãƒŗト  Âˇ  ã‚Ŋãƒŧã‚š: godotengine/godot

å•éĄŒãŽčĒŦ明īŧš
一部ぎ変数やé–ĸ数がäģ–ぎ゚クãƒĒプトから刊į”¨ã§ããšã€į‰šåŽšãŽã‚šã‚¯ãƒĒプトãĢ寞しãĻロãƒŧã‚ĢãƒĢである場合は、ã‚ŗãƒŧド構造を攚善することが重čĻãĢãĒる可čƒŊ性がありぞす。 多分これぎためぎ新しいキãƒŧワãƒŧドを導å…ĨしぞすかīŧŸ ぞたはį§ã¯äŊ•ã‹ãŒæ‹ã—いとäģŠããŽå¯čƒŊ性はありぞすかīŧŸ

archived discussion feature proposal gdscript

æœ€ã‚‚å‚č€ƒãĢãĒるã‚ŗãƒĄãƒŗト

į§ã¯ã“れがすでãĢ閉じられãĻã‚ĸãƒŧã‚ĢイブされãĻいることをįŸĨãŖãĻいぞすīŧˆã“ã‚ŒãĢついãĻåˆĨãŽå•éĄŒãŒé–‹ã‹ã‚Œã‚‹ãšãã‹ãŠã†ã‹ã¯ã‚ã‹ã‚Šãžã›ã‚“īŧ‰ãŒã€ã‚ĸクã‚ģã‚šäŋŽéŖžå­ã¯ãŠãŽãƒ—ログナミãƒŗã‚°č¨€čĒžã§ã‚‚非常ãĢ重čĻãĒ抟čƒŊです。 Godotį”¨ãŽæ–°ã—いノãƒŧドã‚ĸドã‚ĒãƒŗをäŊœæˆã—たいときãĢ、新しいノãƒŧドãĢノãƒŧドぎ外部で変更しãĻはãĒらãĒい内部įŠļ態変数がある場合、それをåĻ¨ã’るもぎはäŊ•ã‚‚ありぞせん。 こぎ抟čƒŊã‚’æ¨Ąå€ŖするためãĢ先頭ぎ下įˇšã‚’äŊŋį”¨ã§ãã‚‹ã“とをį†č§ŖしãĻいぞすが、それでもã‚ĸクã‚ģã‚šäŋŽéŖžå­å…¨äŊ“であるã‚ĸクã‚ģã‚šã‚’åĻ¨ã’ることはありぞせん。 į§ãŽæ„čĻ‹ã§ã¯ã€äģ–ぎäēēがあãĒたぎã‚Ēブジェクトとį›¸äē’äŊœį”¨ã™ã‚‹æ–šæŗ•ã‚’åˆļåžĄã™ã‚‹æ–šæŗ•ãŒãĒいぎで、これはかãĒり大きãĒå•éĄŒã§ã™ã€‚

全ãĻぎã‚ŗãƒĄãƒŗト47äģļ

変数ãĢ最もčŋ‘いぎは、 setgetをäŊŋį”¨ã—ãĻ、äŊ•ã‚‚しãĒいかč­Ļ告をå‡ē力するé–ĸ数をäŊœæˆã™ã‚‹ã“とです。 しかし、いいえ、įœŸãŽãƒ—ナイベãƒŧト変数やé–ĸ数はありぞせん。

@YeldhamDevæ‚˛ã—ã„ã“ã¨ãĢ、 setgetはåŊšãĢįĢ‹ãĄãžã™ãŒã€å…Ŧå…ąãŽč˛Ąį”ŖをčĻ‹ãŸããĒã„å ´åˆã¯ã€ã“ã‚Œã‚’čĄŒã†æ–šæŗ•ã¯ã‚りぞせん。 それはæ‚Ēいです、 @ reduzあãĒたはおう思いぞすかīŧŸ

Pythonでも不可čƒŊです。先頭ãĢ2つぎã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸをäģ˜ã‘ãĻも、変数へぎã‚ĸクã‚ģ゚と変更がåĻ¨ã’られることはありぞせん。 Pythonでは、äģŖわりãĢčĻå‰‡ã‚’äŊŋį”¨ã—ぞす。変数がプナイベãƒŧトであることをį¤ēす1つぎ先頭ぎ下įˇšã€åŽšæ•°ã§ã‚ることをį¤ēすALL_CAPS ...おこからでもã‚ĸクã‚ģ゚できぞすが、原際ãĢã¯å•éĄŒã§ã¯ã‚ã‚Šãžã›ã‚“ã€‚

@NathanLovatoたãļん、そぎ場合、GDScriptはPythonとはį•°ãĒるはずですかīŧŸ

@Chaosusプナイベãƒŧト変数がåŋ…čĻãĒį†į”ąã‚’čĒŦ明するåŧ•æ•°ã‚’提䞛するåŋ…čĻãŒã‚りぞす。 そうでãĒければ、čĒ°ã‹ãŒã“ã‚ŒãĢ取りįĩ„むことはありそうãĢありぞせん。

プナイベãƒŧト変数は、デãƒŧã‚ŋをã‚Ģプã‚ģãƒĢ化し、äģ–ぎクナ゚とぎįĩåˆã‚’é˜˛ããŸã‚ãĢここãĢありぞす-äģ–ぎクナ゚がこれらぎ変数ãĢã‚ĸクã‚ģã‚šã™ã‚‹ãŽã‚’é˜˛ãŽãžã™ã€‚ そもそもそれらãĢã‚ĸクã‚ģ゚しãĒã„å ´åˆã€å•éĄŒã‚‚č§Ŗæąēされぞす。

ãŠãĄã‚‰ãŽå ´åˆã‚‚īŧˆprivateキãƒŧワãƒŧドをäŊŋį”¨ã™ã‚‹ã‹ã€čĻå‰‡ã‚’äŊŋį”¨ã—ãĻ記čŋ°ã™ã‚‹īŧ‰ã€å¤‰æ•°ã‚’プナイベãƒŧトãĢするã‚ŋイミãƒŗグと斚æŗ•ã€å¤‰æ•°ãĢã‚ĸクã‚ģ゚できるã‚ŋイミãƒŗグと斚æŗ•ã‚’å­Ļįŋ’するåŋ…čĻãŒã‚りぞす。 垌でイãƒŗã‚ŋãƒŧフェãƒŧã‚šã‚’åŖŠã™ã“とãĒく内部を変更できるようãĢ、ぞたそぎ逆もできるようãĢã€ã‚¯ãƒŠã‚šãŽč¨­č¨ˆã‚’å­Ļãļåŋ…čĻãŒã‚りぞす。 ã‚ŗãƒŧドã‚ĸãƒŧキテクチãƒŖãĢé–ĸしãĻã¯ã€ã“ã‚ŒãŒæœ€å¤§ãŽå•éĄŒãŽåŽŸå› ã ã¨æ€ã„ãžã™ã€‚

PythonãĢé–ĸしãĻは、äŊ•į™žä¸‡ã‚‚ぎPython開į™ēč€…ãŒåˆŠį”¨ã§ããžã™ã€‚ 変数を「プナイベãƒŧト」ãĢã™ã‚‹ãƒĄã‚Ģニã‚ēムがあり、į›´æŽĨã‚ĸクã‚ģã‚šã‚’é˜˛ãŽãžã™ã€‚ãã‚Œã¯į°Ąå˜ã§ã™ã€‚1つではãĒく2つぎ先頭ぎã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸã‚’č¨˜čŋ°ã—ぞす。 しかし、į§ã¯ãžã čĒ°ã‹ãŒãã‚Œã‚’äŊŋį”¨ã—ãĻいるぎをčĻ‹ãŸã“とがありぞせん。 最čŋ‘ぞでJSでも刊į”¨ã§ããžã›ã‚“でした。 おそらくそぎようãĒäģ–ãŽč¨€čĒžãŒã‚りぞす。

GDscriptãĢåĢめるずきではãĒã„ã¨č¨€ãŖãĻいるぎではありぞせん。äģ–ぎäēēがこぎ抟čƒŊをうぞく刊į”¨ã—ãĻいるかおうかはæœŦåŊ“ãĢ気ãĢしぞせん。 į§ã¯ãã‚ŒãŒãã‚Œãģお有į”¨ã§ã‚るとはįĸēäŋĄã—ãĻいぞせん。 たとえば、Godotは、ã‚Ēãƒŧトã‚ŗãƒŗプãƒĒãƒŧトで先頭ãĢ_ぞたは2がäģ˜ã„た変数を一čĻ§čĄ¨į¤ēできぞせんでしたīŧˆãŸã ã—、äģŽæƒŗé–ĸ数ぎčĻå‰‡ã¨ã—ãĻ_function_nameをäŊŋį”¨ã—ぞすīŧ‰ã€‚

GDScriptでイãƒŗテãƒĒã‚ģãƒŗã‚šã‚’äŊŋį”¨ã—ãŸå†…éƒ¨ãƒĄã‚Ŋãƒƒãƒ‰ã‚’čĄ¨į¤ēしたくãĒいぎで、Cīŧƒã‚„そぎäģ–ぎ静įš„åž‹äģ˜ãč¨€čĒžãŽã‚ˆã†ãĢしぞす。

ええ、į§ã¯åŽŸčŖ…がé›Ŗしく、新しいキãƒŧワãƒŧドがåŋ…čĻã§ã‚ることãĢ同意しぞす。非常ãĢ小さãĒįĩæžœãĢは多大ãĒ労力がåŋ…čĻã§ã™ã€‚
プãƒŦフã‚Ŗック゚が「__」ぎã‚ŊãƒĒãƒĨãƒŧã‚ˇãƒ§ãƒŗã¯ã€å•éĄŒã‚’éƒ¨åˆ†įš„ãĢč§ŖæąēしぞすīŧˆãŠã‹ã’でīŧ‰īŧˆį§ã¯PythonをäŊŋį”¨ã—たことがãĒいぎで、これはį§ãĢとãŖãĻ新しいことですīŧ‰ã€‚

į§ã¯ã“れがすでãĢ閉じられãĻã‚ĸãƒŧã‚ĢイブされãĻいることをįŸĨãŖãĻいぞすīŧˆã“ã‚ŒãĢついãĻåˆĨãŽå•éĄŒãŒé–‹ã‹ã‚Œã‚‹ãšãã‹ãŠã†ã‹ã¯ã‚ã‹ã‚Šãžã›ã‚“īŧ‰ãŒã€ã‚ĸクã‚ģã‚šäŋŽéŖžå­ã¯ãŠãŽãƒ—ログナミãƒŗã‚°č¨€čĒžã§ã‚‚非常ãĢ重čĻãĒ抟čƒŊです。 Godotį”¨ãŽæ–°ã—いノãƒŧドã‚ĸドã‚ĒãƒŗをäŊœæˆã—たいときãĢ、新しいノãƒŧドãĢノãƒŧドぎ外部で変更しãĻはãĒらãĒい内部įŠļ態変数がある場合、それをåĻ¨ã’るもぎはäŊ•ã‚‚ありぞせん。 こぎ抟čƒŊã‚’æ¨Ąå€ŖするためãĢ先頭ぎ下įˇšã‚’äŊŋį”¨ã§ãã‚‹ã“とをį†č§ŖしãĻいぞすが、それでもã‚ĸクã‚ģã‚šäŋŽéŖžå­å…¨äŊ“であるã‚ĸクã‚ģã‚šã‚’åĻ¨ã’ることはありぞせん。 į§ãŽæ„čĻ‹ã§ã¯ã€äģ–ぎäēēがあãĒたぎã‚Ēブジェクトとį›¸äē’äŊœį”¨ã™ã‚‹æ–šæŗ•ã‚’åˆļåžĄã™ã‚‹æ–šæŗ•ãŒãĒいぎで、これはかãĒり大きãĒå•éĄŒã§ã™ã€‚

ええ、į§ã¯@dylmeadowsãĢ同意し

į§ã¯é–“違いãĒくプロぎプナイベãƒŧトé–ĸ数と変数でもありぞす。

  1. ã¯ã„ã€ãƒĄã‚Ŋッド名ぎ前ãĢ_をäŊŋį”¨ã™ã‚‹ãƒ—ナイベãƒŧトぎčĻå‰‡ãŒã‚りぞすが、äģŽæƒŗé–ĸ数ãĢもぞãŖたく同じčĻå‰‡ãŒäŊŋį”¨ã•ã‚Œãžã™ã€‚ したがãŖãĻ、ã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸãŒčĄ¨į¤ēされた場合は、「そぎ抟čƒŊãĢč§ĻれãĒいでください」という意å‘ŗである可čƒŊ性がありぞす。 ぞたは「そぎé–ĸ数を上書きしãĻくださいīŧã€ã€‚ æ­Ŗį›´ãĒã¨ã“ã‚ã€ãã‚Œã¯åąé™ēです。

  2. į§ãŒä¸€äēēで、ぞたは小さãĒプロジェクトで非常ãĢ小さãĒチãƒŧムでäŊœæĨ­ã—ãĻいる場合、おぎé–ĸ数がäŊŋį”¨ã•ã‚Œã‚‹ã“とを意å‘ŗし、おぎé–ĸ数が内部äŊŋį”¨ãŽãŋをį›Žįš„としãĻいるぎかがわかãŖãĻいるぎで、それãģお重čĻã§ã¯ã‚りぞせん。
    しかし、チãƒŧãƒ ãŒæˆé•ˇã™ã‚‹ãĢつれãĻ、これはぞすぞす困é›ŖãĢãĒりぞす。 äēē々はいつもč‡Ē分で書いたわけではãĒいクナ゚で働いãĻいぞす。į§ã¯į‰Šäē‹ã‚’抟čƒŊさせるためãĢ小さãĒ内部é–ĸ数をたくさん書いãĻいるぎで、äēē々がこれらぎé–ĸ数をå‘ŧãŗå‡ēさãĒいようãĢしたいと思ãŖãĻいぞす。意å›ŗしãĒい動äŊœã‚„バグãĢつãĒがる可čƒŊ性があり、ミ゚がį™ēį”Ÿã™ã‚‹ã¨ã“れらをäŋŽæ­ŖするぎãĢ時間がかかりぞす。 すずãĻぎ垌、åŊŧらは外部からå‘ŧãŗå‡ēし可čƒŊã§ã‚ã‚‹ãŸã‚ã€å…ąé€šãŽæ…Ŗįŋ’ãĢもかかわらず、これらぎもぎは、より大きãĒチãƒŧムでäŊ•ãŒčĩˇã“ãŖされぞす。

  3. 少ãĒくとも最垌ぎではãĒく; ã‚Ēãƒŧトã‚ŗãƒŗプãƒĒãƒŧト。 į§ã¯ã‚¯ãƒŠã‚šãŒäŊ•ãŒã§ãã‚‹ã‹ã‚’å­ĻãļためãĢこれをよくäŊŋうäēēです。
    į§ã¯ãã‚Œã‚’「。」 最垌ãĢ、おぎé–ĸ数がポップã‚ĸップするかをįĸēčĒã—ぞす。 äŊ•ã‹åŊšãĢįĢ‹ã¤ã¨æ€ãˆã°ã€į§ã¯ãã‚Œã‚’äŊŋいぞす。
    とãĢかくå‘ŧãŗå‡ēされるはずぎãĒいすずãĻぎé–ĸ数がæ•ŖらかãŖãĻいãĒければ、はるかãĢクãƒĒãƒŧãƒŗãĢãĒりぞす。 それãĢ加えãĻ-そしãĻäŊ•åēĻも-į§ã¯ãžã ã“れらぎ_nameé–ĸ数がプナイベãƒŧトかäģŽæƒŗかをįŸĨりぞせん。

ぞた、プナイベãƒŧト変数は個äēēįš„ãĒプロジェクトでもåŊšįĢ‹ãĄãžã™ã€‚ č‡Ē分が取りįĩ„ã‚“ã§ã„ã‚‹ã‚˛ãƒŧムãĢ取りįĩ„むことができãĒい期間があるぎで、č‡Ē分ぎ抟čƒŊぎいくつかがäŊ•ã‚’しãĻいるぎかをåŋ˜ã‚Œå§‹ã‚ãžã™ã€‚ ãžãŸã¯ã€ãŠãĄã‚‰ã‚’äŊŋį”¨ã™ãšãã‹ã€äŊŋį”¨ã™ãšãã§ãĒいかをåŋ˜ã‚ŒãĻいぞす。

プナイベãƒŧト変数はこれでį´ æ™´ã‚‰ã—いでしょうīŧ 変数ぞたはé–ĸ数ãĢノãƒŧドぎ外部からã‚ĸクã‚ģ゚できãĒいようãĢしぞす。プロジェクトãĢæˆģãŖたときãĢ、変数ぎäŊŋį”¨æ–šæŗ•ã‚’推æ¸Ŧでき、すずãĻぎã‚ŗãƒŧドをもう一åēĻ厌全ãĢčĒ­ãŋ取るåŋ…čĻã¯ã‚りぞせん。

ByteronとdylmeadowsãŒč¨€ãŖたことも2į•Ēį›Žã§ã™ã€‚ åŊŧã‚‰ã¯ãĄã‚‡ã†ãŠåŊŧらぎ投į¨ŋを十分ãĢよく書いãĻ、į§ãŒč€ƒãˆãĻいたことをæ­ŖįĸēãĢč¨€ã„ãžã—ãŸã€‚ į§ãŽ2ã‚ģãƒŗトをčŋŊ加したかãŖただけです。

äŊ•äēēかぎãƒĻãƒŧã‚ļãƒŧãŒčˆˆå‘ŗを持ãŖãĻおり、これãĢついãĻčŠąã—åˆã„ãŸã„ãŽã§ã€å†é–‹ã—ãžã™ã€‚ ãžã č¨ˆį”ģされãĻいぞせんが、ã‚ŗミãƒĨニテã‚ŖãĢåŧˇã„é–ĸåŋƒãŒã‚るかおうかãĢついãĻčŠąã—åˆã„ã€įĸēčĒã™ã‚‹ã“とができぞす。

Pythonは、į†æƒŗとしãĻč¨€åŠã—ãĻいる最éĢ˜ãŽč¨€čĒžã§ã¯ã‚りぞせん。
Godotは非常ãĢã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆæŒ‡å‘ã§ã‚ã‚‹ã¨č¨€ã‚ã‚ŒãĻいぞす。 すずãĻぎ゚クãƒĒプトもã‚Ēブジェクトです。 ã‚Ēブジェクト指向プログナミãƒŗグぎä¸ģãĒ原則ぎ1つは、ã‚Ģプã‚ģãƒĢ化を提䞛することです。 外から手をč§ĻれずãĢäŊ•ã‹ã‚’したいぎãĒã‚‰ã€ãã‚Œã¯ãŠãã‚‰ãæœ€č‰¯ãŽį†į”ąã§ã™ã€‚

個äēēįš„ãĢは、äēē々が変数をįˇ¨é›†ã—たりé–ĸ数ãĢã‚ĸクã‚ģ゚したりするぎをįĩļ寞ãĢé˜˛ã_ īŧˆãžãŸã¯_internal_ãĒおīŧ‰ã‚’äģ˜ã‘ぞす。

変数/é–ĸ数をã‚Ēãƒŧトã‚ŗãƒŗプãƒĒãƒŧトから隠すだけぎキãƒŧワãƒŧドīŧˆãžãŸã¯åŒæ§˜ãŽã‚­ãƒŧワãƒŧドīŧ‰ãĢは反寞しぞせん。 ã‚ĸクã‚ģ゚を厌全ãĢé˜˛ãåŋ…čĻã¯ãĒいと思いぞす。

一斚では、įĻæ­ĸするぎではãĒく、č­Ļå‘Šã™ã‚‹æ–šãŒč‰¯ã„ã§ã™ã€‚ しかし一斚で、プナイベãƒŧトフã‚ŖãƒŧãƒĢãƒ‰ã¨ãƒĄã‚Ŋッドは通常äŊ•åēĻもäŊŋį”¨ã•ã‚Œãžã™ã€‚ ãžãŸã€é•ˇã„å¤‰æ•°åīŧˆ _internal_variable īŧ‰ã¯å°‘しéĸ倒です。
いずれãĢせよ、キãƒŧワãƒŧドprivateが存在しãĻも、それをäŊŋį”¨ã™ã‚‹åŋ…čĻã¯ã‚りぞせん。

クナ゚ぎプナイベãƒŧãƒˆãƒĄãƒŗバãƒŧを厚数ぎようãĒもぎãĢしぞす。 同様ãĢ、変数名をBIG LETTERSãĢ記čŋ°ã—ãĻ、そぎ値を変更しãĒいことãĢ同意することができぞす。 しかし、į§ãŸãĄã¯ãã‚Œã‚’しぞせんねīŧŸ つぞり、プナイベãƒŧト変数は、通常ぎ変数と厚数ぎクロ゚です。 こぎ場合、į‰šåˆĨãĒキãƒŧワãƒŧドをå…Ĩ力しãĻãŋぞせんかīŧŸ

ã¯ã„ã€ãƒĄã‚Ŋッド名ぎ前ãĢ_をäŊŋį”¨ã™ã‚‹ãƒ—ナイベãƒŧトぎčĻå‰‡ãŒã‚りぞすが、äģŽæƒŗé–ĸ数ãĢもぞãŖたく同じčĻå‰‡ãŒäŊŋį”¨ã•ã‚Œãžã™ã€‚ したがãŖãĻ、ã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸãŒčĄ¨į¤ēされた場合は、「そぎ抟čƒŊãĢč§ĻれãĒいでください」という意å‘ŗである可čƒŊ性がありぞす。 ぞたは「そぎé–ĸ数を上書きしãĻくださいīŧã€ã€‚ æ­Ŗį›´ãĒã¨ã“ã‚ã€ãã‚Œã¯åąé™ēです。

それがį§ãŒã“こでčĻ‹ãĻã„ã‚‹æœ€å¤§ãŽå•éĄŒã§ã™ã€‚ privateキãƒŧワãƒŧドぎäģŖわりãĢ、 virtualキãƒŧワãƒŧドをäŊŋį”¨ã§ãã‚‹ã§ã—ょうか。 一部ぎäģŽæƒŗãƒĄã‚Ŋッドは、「funcã€ã‚’č¨˜čŋ°ã™ã‚‹ã¨ããĢすでãĢã‚Ēãƒŧトã‚ŗãƒŗプãƒĒãƒŧトãĢ襨į¤ēされるため、上書きするはずぎäģŽæƒŗé–ĸ数とã‚Ēãƒŧトã‚ŗãƒŗプãƒĒãƒŧトãĢ襨į¤ēされるずきではãĒいプナイベãƒŧトé–ĸ数を明į¤ēįš„ãĢåŒēåˆĨするキãƒŧワãƒŧドで十分ãĒ場合がありぞす。 virtualキãƒŧワãƒŧドぎ刊į‚šã¯ã€ privateよりもäŊŋį”¨é ģåēĻが少ãĒいため、書きčžŧãŋが少ãĒくãĒることです。

プナイベãƒŧãƒˆã‚¯ãƒŠã‚šãŽãƒĄãƒŗバãƒŧもåĢぞれãĻいるぎをčĻ‹ãĻåŦ‰ã—いです。 これがäģ–ãŽč¨€čĒžãĢ存在するį†į”ąãŒã‚りぞす。 äģ–ぎæļˆč˛ģ者/チãƒŧãƒ ãƒĄãƒŗバãƒŧīŧˆãžãŸã¯ã‚ãĒたč‡ĒčēĢīŧ‰ã¯ã€ã™ãšãĻぎクナ゚がおぎようãĢ抟čƒŊするかをįŸĨるåŋ…čĻã¯ã‚りぞせん。 原際、åŊŧらはおそらく、とãĢかく内部ãĢあるはずぎ抟čƒŊをいじくり回すã‚Ēãƒ—ã‚ˇãƒ§ãƒŗさえ持ãŖãĻはいけぞせん。

先頭ぎã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸは、これがプナイベãƒŧãƒˆãƒĄãƒŗバãƒŧであることを「į¤ēす」åŋ…čĻãŒã‚ることをį†č§ŖしãĻいぞすが、原際ãĢは、それを変更することでäģ•äē‹ãŒåŽŒäē†ã™ã‚‹ã‹ãŠã†ã‹ã¯čĒ°ã‚‚æ°—ãĢしぞせん。 これは、プナグイãƒŗとしãĻäŊŋį”¨ã—たい場合ãĢį‰šãĢč‹Ļį—›ã§ã‚り、čĒ°ã‚‚がåĨŊきãĒようãĢ変更できぞす。 äŊœæˆã™ã‚‹ã‚Ēブジェクト/゚クãƒĒプトぎįŠļ態を厌全ãĢåˆļåžĄã—ãŸã„ã¨æ€ã„ãžã™ã€‚ čĒ°ã‹ãŒåĨŊきãĒときãĢįŠļ態ぎあらゆる側éĸを変更できるã‚Ēブジェクトがあると、äģ–ぎäēēがイナイナするäģĨ上ãĢæļˆč˛ģできるã‚ŗãƒŧドがį”Ÿæˆã•ã‚Œãžã™ã€‚

それãĢ加えãĻ、「刊į”¨å¯čƒŊãĒ」変数/é–ĸ数ぎãƒĒ゚トを整į†ã™ã‚‹ãŽã¯į´ æ™´ã‚‰ã—いことです。

開į™ēチãƒŧムãĢ1つぎ推åĨ¨ã‚’čĄŒã†ã“ã¨ã¯ã§ããžã™ã‹īŧŸãã‚Œã§ã¯ã€ã“れらすずãĻã‚’č€ƒæ…Žã—ãĻください。 ã‚Ēãƒŧトã‚ŗãƒŗプãƒĒãƒŧトãƒĒ゚トぎ順åēã‚’変更しぞす。 文字ぞたは数字で始ぞらãĒいvarぞたはfuncは、ã‚Ēãƒŧトã‚ŗãƒŗプãƒĒãƒŧトãƒĒ゚トぎ__Bottom__ãĢ襨į¤ēされぞす。 æŦĄãĢ、ã‚ĸã‚¤ãƒ†ãƒ ã‚’čĄ¨į¤ēするãĢは、_をå…Ĩ力するåŋ…čĻãŒã‚りぞす。さらãĢ、名前ãĢäģ–ぎ非数å­Ļč¨˜åˇãžãŸã¯čĢ–į†č¨˜åˇã‚’äŊŋį”¨ã§ãã‚‹ã¨äžŋ刊ですかīŧŸ ぞだčŠĻしãĻいぞせんが、â‚ŦDisplayぞたはÂĨPrintã¯č¨ąåŽšã§ãã‚‹é–ĸ数名ですかīŧŸ NS。

さらãĢ、名前ãĢäģ–ぎ非数å­Ļč¨˜åˇãžãŸã¯čĢ–į†č¨˜åˇã‚’äŊŋį”¨ã§ãã‚Œã°ã„いぎではãĒいでしょうか。 ぞだčŠĻしãĻいぞせんが、â‚ŦDisplayぞたはÂĨPrintã¯č¨ąåŽšã§ãã‚‹é–ĸ数名ですかīŧŸ NS。

https://github.com/godotengine/godot/issues/24785を参į…§ã—ãĻ

したがãŖãĻ、これをいじくり回した垌、äŊ•ã‚‚しãĒいã‚ģッã‚ŋãƒŧを厚įžŠã™ã‚‹ã¨ã€åˆĨぎ゚クãƒĒプトで同じ変数ãĢæ–°ã—ã„å€¤ã‚’å‰˛ã‚ŠåŊ“ãĻãĻå°åˆˇã—ã‚ˆã†ã¨ã—ãĻも、元ぎ値はæŦĄãŽã‚ˆã†ãĢãĒるというįĩčĢ–ãĢé”ã—ãžã—ãŸã€‚å°åˆˇã•ã‚Œãžã™ã€‚ プナイベãƒŧトではありぞせんが、十分čŋ‘いと思いぞす...

å…Ŧ開されãĻいるようãĢčĻ‹ãˆã€å¤‰æ›´ã—たばかりぎ変数が変更されãĻいãĒいというヒãƒŗトがぞãŖたくãĒいことを意å‘ŗしぞすかīŧŸ
ã“ãŽãƒĄã‚Ŋッドをåēƒį¯„å›˛ãĢäŊŋį”¨ã™ã‚‹ã‚ŗãƒŧドぎデバッグをæĨŊしんでください。

įŠēぎã‚ģッã‚ŋãƒŧぎäģŖわりãĢ、エナãƒŧをå‡ē力することもできぞす。

プログナムをčĩˇå‹•ã—ãĻ原際ãĢそぎã‚ŗãƒŧãƒ‰čĄŒãĢåˆ°é”ã™ã‚‹ã¨ã€åŽŸčĄŒã—ãĻはいけãĒã„ã“ã¨ã‚’åŽŸčĄŒã—ãŸã“ã¨ã—ã‹ã‚ã‹ã‚Šãžã›ã‚“ã€‚ ã‚ŗãƒŧドを書いãĻいる間はぞだå…Ŧ開されãĻいるようãĢčĻ‹ãˆã€å˜ä¸€ãŽãƒ—ナイベãƒŧãƒˆå¤‰æ•°ã‚’č¨­åŽšã™ã‚‹ãĢã¯č¤‡æ•°čĄŒãŽã‚ŗãƒŧドがåŋ…čĻã§ã™ã€‚
įŊŽãprivateそぎ変数ぎ前ãĢは道įŸ­ãã€ã‚ŗãƒŧドぎčŋŊ加ぎ回įˇšã‚’åŋ…čĻã¨ã›ãš

GDScriptは動įš„言čĒžã§ã‚ã‚‹ãĢもかかわらず、į§ãĢはかãĒりC ++ãŖãŊい感じがしぞす。 C ++でぎã‚ŗãƒŧãƒ‰ãŽč¨˜čŋ°ã‹ã‚‰GDScriptãĢ切りæ›ŋえると、これらぎã‚ĸクã‚ģã‚šäŋŽéŖžå­ãŒå¤ąã‚ã‚Œãžã™ã€‚ ãã†ã¯č¨€ãŖãĻも、GDScriptはįĸēかãĢOOPぎ厌全ãĒã‚ĩポãƒŧトをæŦ ã„ãĻいぞす。

į§ã¯ã“ãŽå•éĄŒã‚’ã–ãŖとčĻ‹ãŸã ã‘ですが、名前ぎ前ãĢã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸがäģ˜ã„ãĻいる場合は、少ãĒくともé–ĸ数と変数をã‚Ēãƒŧトã‚ŗãƒŗプãƒĒãƒŧãƒˆã‹ã‚‰éžčĄ¨į¤ēãĢできるとäžŋ刊です。 それãĢé–ĸã™ã‚‹éĄ•č‘—ãĒå•éĄŒã¯ã€ãã‚ŒãŒäģŽæƒŗé–ĸ数であるかおうかを判断することであり、したがãŖãĻ、おそらくé–ĸäŋ‚ãĒãčĄ¨į¤ēされるはずです。

ã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸはäģŽæƒŗé–ĸ数ãĢもäŊŋį”¨ã•ã‚ŒãĻおり、äģŽæƒŗé–ĸ数もå…Ŧ開したい場合がありぞす。

ã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸが前ãĢäģ˜ã„たé–ĸ数をäģ–ぎノãƒŧド/ã‚Ēブジェクトからぎãŋ非表į¤ēãĢするかもしれぞせんが、č‡Ēåˇą/ベãƒŧ゚でぎå‘ŧãŗå‡ēしãĢ寞しãĻã¯ãã‚Œã‚‰ã‚’čĄ¨į¤ēしぞす。

į§ãŽææĄˆã¯ã€äģŽæƒŗé–ĸ数ãĢは単一ぎã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸをäŊŋį”¨ã—、「プナイベãƒŧト」é–ĸ数ãĢはäēŒé‡ãŽå…ˆčĄŒã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸをäŊŋį”¨ã™ã‚‹ã“とです。 こぎようãĢしãĻ、äģŽæƒŗé–ĸ数ãĢåŊąéŸŋを与えることãĒく、ã‚Ēãƒŧトã‚ŗãƒŗプãƒĒãƒŧトからそれらを隠すことができぞす。

変数ぎã‚ĸクã‚ģã‚š_attribute_を変更するときは、そぎ_name_を変更するåŋ…čĻãŒã‚るため、ã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸをäŊŋį”¨ã—ãĻå¤‰æ•°ã‚’éžčĄ¨į¤ēãĢするぎは遊切ではありぞせん。 原際、 variableと_variableはį•°ãĒる名前です。
これもUNIXãƒ•ã‚Ąã‚¤ãƒĢ名ぎドットぎようãĒもぎです。かãĒりį‰Šč­°ã‚’醸すæąē厚です。

これがį§ãŽæ„čĻ‹ã§ã™

  • プナイベãƒŧトé–ĸ数ぎプãƒŦフã‚Ŗック゚「__」
  • 「__」がäģ˜ã„ãĻいるé–ĸ数はã‚Ēãƒŧトã‚ŗãƒŗプãƒĒãƒŧトãĢ襨į¤ēされぞせん
  • 「privatefuncxīŧˆīŧ‰ã€ã¯ã€ã€Œfunc __xīŧˆīŧ‰ã€ãŽã‚ˇãƒŗã‚ŋãƒƒã‚¯ã‚šã‚ˇãƒĨã‚Ŧãƒŧです。

ä¸Šč¨˜ã¯ã€ã€Œ__」で始ぞる変数をåĢむã‚ŗãƒŧドをåŖŠã—ぞす。 でもそれを除けば、į†æƒŗįš„ãĒã‚ˇã‚šãƒ†ãƒ ã ã¨æ€ã„ãžã™ã€‚

これぞでぎGDScriptぎ抟čƒŊはPython / JSと非常ãĢよくäŧŧãĻãŠã‚Šã€ã“ã‚Œã‚‰ãŽč¨€čĒžã¯ãŠãĄã‚‰ã‚‚非常ãĢæ­ŖåŊ“ãĒį†į”ąã§ãƒ—ナイベãƒŧト変数とé–ĸ数を持ãŖãĻã„ãžã›ã‚“ã€‚ã“ã‚Œã¯ã€č¨­č¨ˆå“˛å­Ļとは厌全ãĢæ­Ŗ反寞です。 あãĒたãĢはč‡Ēį”ąãŒã‚り、そぎč‡Ēį”ąã¯é‡čĻã§ã™ã€‚それがã‚ŗãƒŧデã‚Ŗãƒŗグを厚易ãĢするもぎです。 あãĒたはã‚Ģプã‚ģãƒĢ化をįŠ į‰˛ãĢしぞす、しかしそれはåŊŧã‚‰ãŽå“˛å­Ļです。 įœŸãŽã‚Ģプã‚ģãƒĢ化は、ã‚ŋイプチェックãĒしですでãĢåŖŠã‚ŒãĻいぞす[すずãĻぎã‚ŋイプをč‡Ē分でチェックしãĒい限り、そうすることはãĒいでしょう]。 したがãŖãĻ、åŽŗ密ãĒ型指厚を原čŖ…しãĒい限り、プナイベãƒŧト変数は間違ãŖãĻいると感じぞす。 OOPぎ勞配では、åŽŗ密ãĒ型äģ˜ã‘はプナイベãƒŧト変数ぎ前ãĢæĨぞす。 åŽŗ密ãĒ型äģ˜ã‘はあるがプナイベãƒŧト変数がãĒã„č¨€čĒžã¯ãŸãã•ã‚“ありぞすが、プナイベãƒŧト変数がありåŽŗ密ãĒ型äģ˜ã‘がãĒã„č¨€čĒžã¯įŸĨりぞせん。 これもぞた、æ­ŖåŊ“ãĒį†į”ąãŒã‚りぞす。 さらãĢ、JSをäŊŋį”¨ã™ã‚‹ã¨ã€įļ™æ‰ŋツãƒĒãƒŧ全äŊ“ãĢã‚ĸクã‚ģ゚でき、それらぎ側éĸも変更できぞす。 ã‚Ēブジェクトを持つäģģ意ぎã‚ŗãƒŧドãĢよãŖãĻã€åŽŸčĄŒæ™‚ãĢã‚Ēブジェクトがįļ™æ‰ŋするクナ゚を変更できぞす。 ã‚‚ãĄã‚ã‚“ã€ãã‚Œã¯čĩˇã“りぞせんが、デã‚ļイãƒŗå“˛å­Ļをį¤ēしãĻいぞす。

したがãŖãĻ、į§ãŽæ„čĻ‹ã§ã¯ã€įœŸãŽãƒ—ナイベãƒŧãƒˆå¤‰æ•°ã¯č¨€čĒžã‚’大嚅ãĢåĻ¨ã’るでしょう。 とãĢかく、PythonãŽã‚ˇã‚šãƒ†ãƒ ã¯ãã‚Œã‚’ã†ãžãã‚„ãŖãĻいると思いぞす。プナイベãƒŧト変数ãĢã‚ĸクã‚ģ゚するためãĢäŊŋį”¨ã§ãã‚‹__がありぞすが、内部įš„ãĒもぎをいじãŖãĻいることは明らかですが、それでも意å‘ŗぎあるåˆļ限はありぞせん。 įœŸãŽOOPč¨­č¨ˆå“˛å­Ļを望むäēēは、単ãĢ「__」をäŊŋį”¨ã—たり、äŧšį¤žã‚„プロジェクトぎã‚ŗãƒŧデã‚Ŗãƒŗã‚°ã‚šã‚ŋイãƒĢでäŊŋį”¨ã—たりすることはできぞせん。 たãļん、それをエナãƒŧとしãĻマãƒŧクするã‚Ēãƒ—ã‚ˇãƒ§ãƒŗがいいでしょう。 つぞり、一čˆŦįš„ãĢ、ダックã‚ŋイピãƒŗグとプナイベãƒŧト変数は原際ãĢは一įˇ’ãĢãĒりぞせん。 少ãĒくとも、名前įŠē間を厌全ãĢ台į„Ąã—ãĢするぎは、「hi」がプナイベãƒŧトぎ場合、obj.setīŧˆ "hi"、5īŧ‰ãŒæŠŸčƒŊしãĒいためです。 しかし、「こんãĢãĄã¯ã€ãŒå­˜åœ¨ã—ãĒい場合は抟čƒŊしぞすかīŧŸ それはあぞり意å‘ŗがありぞせん...だから、あãĒたがäŊ•ã‚’しãĻもプナイベãƒŧトãĢ厌全ãĢã‚ĸクã‚ģ゚できãĒいようãĢすることは非常ãĢåŧˇã„ことではありぞせん、それがį§ãŽæŠ•įĨ¨ã§ã™ã€‚ Pythonがįžåœ¨čĄŒãŖãĻいるようãĢ、プナイベãƒŧト変数が存在することは非常ãĢåŧˇåŠ›ã§ã™ã€‚ TbhæœŦåŊ“ãĢã‚ĸクã‚ģ゚できãĒいプナイベãƒŧト変数がåŋ…čĻã ãŖたとしãĻも、プナイベãƒŧト変数をäŊŋį”¨ã—たダックã‚ŋイピãƒŗã‚°ãŽå•éĄŒã‚’č§Ŗæąēする斚æŗ•ãŒãžã ã‚ã‹ã‚Šãžã›ã‚“。 obj.setをブロックしãĻ、エナãƒŧを゚ロãƒŧさせるだけだと思いぞす。 ここで、obj.setはブãƒŧãƒĢ値をčŋ”すåŋ…čĻãŒã‚りぞすが、これはåĨ‡åĻ™ãĒことです。 is_privateå‘ŧãŗå‡ēしīŧŸ obj.setをäŊŋį”¨ã™ã‚‹å‰ãĢå‘ŧãŗå‡ēすåŋ…čĻãŒã‚りぞすかīŧŸ idk

[ああ、æœŦåŊ“ぎところ、原際ぎエナãƒŧ検å‡ēを取垗できぞすか。プナイベãƒŧト変数ãĢついãĻčŠąã—ãĻいぞすが、įžæ™‚į‚šã§ã¯ã€gdscriptãĢãƒã‚°ãŒã‚ã‚‹å ´åˆã€ã‚˛ãƒŧムはそれをéģ™ãŖãĻį„ĄčĻ–しぞすīŧˆfacepalmīŧ‰ã€‚ たãļんį§ã¯ãã‚Œã‚’間違ãŖãĻいぞすが、į§ãŽã‚ŗãƒŧドがäŊ•ã‹ã‚’čĄŒã†ã¨ã€é•æŗ•ãĒgdscriptがé–ĸ数からnullをčŋ”すようãĢčĻ‹ãˆã€čŋŊčˇĄãŒéžå¸¸ãĢé›ŖしくãĒりぞす。JSはこれぞでãĢãĒãã˛ãŠãã€JSã¯č¨€čĒžãŽæˇˇäšąã§ã™ã€‚ ã‚˛ãƒŧãƒ ãŽã‚¯ãƒŠãƒƒã‚ˇãƒĨが多すぎる可čƒŊ性があることはわかãŖãĻいぞすが、ã‚ŗãƒŧドがおこでåŖŠã‚ŒãŸã‹ã‚’æŠŠæĄã™ã‚‹ãŸã‚ãĢã€å‰č€…ãŒå°åˆˇã•ã‚Œã€åžŒč€…ãŒå°åˆˇã•ã‚ŒãĒい2つぎé€Ŗįļšã™ã‚‹print゚テãƒŧãƒˆãƒĄãƒŗトがčĻ‹ã¤ã‹ã‚‹ãžã§ã€print゚テãƒŧãƒˆãƒĄãƒŗトを配įŊŽã—ãĻã‚ŗãƒŧドベãƒŧ゚をバイナãƒĒ検į´ĸするåŋ…čĻãŒã‚りぞす。 JS / Pythonは、äģ–ぎすずãĻãĢおいãĻおれãģおč‡Ēį”ąã§ã‚ã‚‹ãĢもかかわらず、そぎ意å‘ŗで銚くãģおはるかãĢåŽŗæ ŧです。]

å•éĄŒã‚’æœ€å°é™ãĢ抑えるためãĢ、一č˛Ģ性ぎあるプロジェクトįĩ„įš”ã‚’čĻ‹ã¤ã‘ることをお勧めしぞす。 ã‚ˇãƒŧãƒŗぎãƒĢãƒŧトノãƒŧドをイãƒŗã‚ŋãƒŧフェイ゚としãĻäŊŋį”¨ã—ãĻã€å¤–éƒ¨ã‹ã‚‰ã‚ˇãƒŧãƒŗをåˆļåžĄã—ã€å­ã‚šã‚¯ãƒĒプトをバックエãƒŗドとしãĻäŊŋį”¨ã§ããžã™ã€‚

ãžãŸã¯ã€ãƒĄã‚ŊッドぎãŋをäŊŋį”¨ã—ã€å¤‰æ•°ã¨ã‚ˇã‚°ãƒŠãƒĢをエク゚ポãƒŧトし、外部から単į´”ãĒ変数ãĢč§ĻれãĒいようãĢすることもできぞす。 これは単į´”ãĒčĻå‰‡ã§ã‚り、GDScriptはそぎ単į´”さをįļ­æŒã§ããžã™ã€‚

Pythonでも不可čƒŊです。先頭ãĢ2つぎã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸをäģ˜ã‘ãĻも、変数へぎã‚ĸクã‚ģ゚と変更がåĻ¨ã’られることはありぞせん。 Pythonでは、äģŖわりãĢčĻå‰‡ã‚’äŊŋį”¨ã—ぞす。変数がプナイベãƒŧトであることをį¤ēす1つぎ先頭ぎ下įˇšã€åŽšæ•°ã§ã‚ることをį¤ēすALL_CAPS ...おこからでもã‚ĸクã‚ģ゚できぞすが、原際ãĢã¯å•éĄŒã§ã¯ã‚ã‚Šãžã›ã‚“ã€‚

į§ãŒč¨€ã„たいぎは、Pythonで_private_åąžæ€§ã‚’æŒã¤ã“ã¨ãŒå¯čƒŊであるということです。

åŧ•į”¨īŧˆhttps://www.python.org/dev/peps/pep-0008/īŧ‰īŧš

__double_leading_underscoreīŧšã‚¯ãƒŠã‚šåąžæ€§ãĢ名前をäģ˜ã‘るときãĢ、名前マãƒŗグãƒĒãƒŗグをå‘ŧãŗå‡ēしぞすīŧˆã‚¯ãƒŠã‚šFooBar内では、__ booは_FooBar__booãĢãĒりぞす。äģĨ下を参į…§ã—ãĻくださいīŧ‰ã€‚

__double_leading_and_trailing_underscore__īŧšãƒĻãƒŧã‚ļãƒŧがåˆļåžĄã™ã‚‹åå‰įŠē間ãĢ存在する「魔æŗ•ãŽã€ã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆãžãŸã¯åąžæ€§ã€‚ 例īŧš__ init __、__ import__、ぞたは__file__。 そぎようãĒ名前をį™ē明しãĒいでください。 文書化されãĻいるとおりãĢぎãŋäŊŋį”¨ã—ãĻください

そぎãƒĒãƒŗクをクãƒĒックしãĻCTRL + Fで「プナイベãƒŧト」ãĢすると、æŦĄãŽã‚ˆã†ãĢ襨į¤ēされぞす。

Pythonでは原際ãĢプナイベãƒŧトãĒåąžæ€§ã¯ãĒいため、ここでは「プナイベãƒŧト」というį”¨čĒžã‚’äŊŋį”¨ã—ぞせんīŧˆé€šå¸¸ã¯ä¸čĻãĒ量ぎäŊœæĨ­ãŒåŋ…čĻã§ã™īŧ‰ã€‚

äēŒé‡ã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸぞたは単一ã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸ変数は、通常ぎ変数と同じようãĢ抟čƒŊしぞす。これらはäŊŋį”¨ã—ãĒいでください。ナイブナãƒĒを更新すると内部変数であるため、変更される可čƒŊ性があることを参į…§ã™ã‚‹ãŸã‚ãŽæ…Ŗ䞋です。 一čˆŦãĢ、GDScriptぎようãĒPython言čĒžã¯ã‚Ēブジェクトを単ãĒã‚‹čžžæ›¸ã§ã‚ã‚‹ã‹ãŽã‚ˆã†ãĢæ‰ąã†ãŸã‚ã€ãƒ—ãƒŠã‚¤ãƒ™ãƒŧト変数をåŧˇåˆļしãĻ名前įŠē間をæļˆč˛ģさせるぎは厄äģ‹ã§ã™ã€‚

そぎãƒĒãƒŗクをクãƒĒックしãĻCTRL + Fで「プナイベãƒŧト」ãĢすると、æŦĄãŽã‚ˆã†ãĢ襨į¤ēされぞす。

Pythonでは原際ãĢプナイベãƒŧトãĒåąžæ€§ã¯ãĒいため、ここでは「プナイベãƒŧト」というį”¨čĒžã‚’äŊŋį”¨ã—ぞせんīŧˆé€šå¸¸ã¯ä¸čĻãĒ量ぎäŊœæĨ­ãŒåŋ…čĻã§ã™īŧ‰ã€‚

äēŒé‡ã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸぞたは単一ã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸ変数は、通常ぎ変数と同じようãĢ抟čƒŊしぞす。これらはäŊŋį”¨ã—ãĒいでください。ナイブナãƒĒを更新すると内部変数であるため、変更される可čƒŊ性があることを参į…§ã™ã‚‹ãŸã‚ãŽæ…Ŗ䞋です。 一čˆŦãĢ、GDScriptぎようãĒPython言čĒžã¯ã‚Ēブジェクトを単ãĒã‚‹čžžæ›¸ã§ã‚ã‚‹ã‹ãŽã‚ˆã†ãĢæ‰ąã†ãŸã‚ã€ãƒ—ãƒŠã‚¤ãƒ™ãƒŧト変数をåŧˇåˆļしãĻ名前įŠē間をæļˆč˛ģさせるぎは厄äģ‹ã§ã™ã€‚

į§ã¯åŒæ„ã—ぞす、åŊŧらはそれを_private_åąžæ€§ã¨ã¯å‘ŧãŗぞせん。 ただし、そぎäģ•įĩ„ãŋãĢついãĻčĒŦ明しぞす。

# defining class Employee
class Employee:
    def __init__(self, name, salary):
        self.name = name
        self.__salary = salary
>>> emp = Employee("Bill", 10000)
>>> emp.__salary
# AttributeError: 'employee' object has no attribute '__salary'

したがãŖãĻ、_private_åąžæ€§ã¨ã¯å‘ŧばれぞせんが、ãģとんお同じようãĢ動äŊœã—ぞす。
PythonãĢ存在するぎで、GDScriptãĢãģãŧプナイベãƒŧトãĒåąžæ€§ãŒã‚ã‚‹ã¨äžŋ刊です。

そうそう、į§ã¯ã‚ãĒたãĢåŧˇãåŒæ„ã—ぞす。 Pythonは、._ Employee__salaryをäŊŋį”¨ã™ã‚‹ãŸã‚ãŽã‚ˇãƒŗã‚ŋãƒƒã‚¯ã‚šã‚ˇãƒĨã‚Ŧãƒŧを提䞛しãĻいるだけです。 į§ã¯å€‹äēēįš„ãĢPythonぎやり斚がåĨŊきではãĒく、ã‚ŗãƒĄãƒŗトでčŋ°ãšãŸã‚ˆã†ãĢ、Godotで大嚅ãĢ攚善できると思いぞす。

class Employee:
      var name # normal
      private var salary # Syntactic sugar for var _salary

_Employee__salaryは変数名を隠すためぎ醜い斚æŗ•ã§ã‚り、プナイベãƒŧトキãƒŧワãƒŧドをäŊŋį”¨ã™ã‚‹ã¨ã€é€šå¸¸ãŽOOPと同じようãĢãĒるため、これはよりクãƒĒãƒŧãƒŗです。 さらãĢč‰¯ã„ã“ã¨ãĢ、これはパブãƒĒック変数salaryとプナイベãƒŧト変数_salaryを持つ抟čƒŊをブロックしぞす。これは醜く、Javaぎ場合と同じようãĢ構文エナãƒŧãĢãĒることが望ぞしいです。 ã“ã‚Œã¯ã€ä¸Ąæ–šãŒã€Œvarsalary」と「privatevarsalary」とåŽŖč¨€ã•ã‚Œã‚‹ãŸã‚ã§ã™ã€‚ã“ã‚Œã¯æ˜Žã‚‰ã‹ãĒįŸ›į›žã§ã™ã€‚ åˆĨãŽč€ƒãˆæ–šã¨ã—ãĻã€ã€ŒãƒĄãƒŗバãƒŧmを持つäģ–ぎクナ゚Cぎプナイベãƒŧト変数ãĢã‚ĸクã‚ģ゚するãĢは、C._mぎようãĢã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸをäŊŋį”¨ã™ã‚‹åŋ…čĻãŒã‚りぞす」というもぎがありぞす。 æŦĄãĢ、ã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸで始ぞる変数ぎåŽŖč¨€ã‚’ã‚¨ãƒŠãƒŧãĢする可čƒŊ性がありぞす。つぞり、変数をåŽŖč¨€ã™ã‚‹å”¯ä¸€ãŽæ–šæŗ•ã‚’プナイベãƒŧトãĢしãĻ、äŊ•ãŒčĄŒã‚ã‚ŒãĻいるぎかが明įĸēãĢãĒるようãĢしぞす。

PythonぎįŠļæŗãŒæœ›ãžã—ã„ã¨ã¯č¨€ãˆãĒい唯一ぎį†į”ąã¯ã€å¤‰æ•°ãŽä¸Šéƒ¨ãĢåŽŖč¨€ãŒãĒく、é–ĸ数æœŦäŊ“ぎいずれかでクナ゚変数を構成しãĻいるためだと思いぞす。 GDScriptはクナ゚æœŦäŊ“でåŽŖč¨€ã‚’åŋ…čĻã¨ã—ãĻいるようで、JavaぎようãĒプナイベãƒŧトåŽŖč¨€ã‚’į°Ąå˜ãĢį†č§Ŗできぞす。

多くぎå…Ĩ力をį¯€į´„しãĒã„é™ã‚Šã€ã‚ˇãƒŗã‚ŋãƒƒã‚¯ã‚šã‚ˇãƒĨã‚ŦãƒŧとしãĻ抟čƒŊするキãƒŧワãƒŧドをäŊŋį”¨ã™ã‚‹ãŽã¯åĨŊきではありぞせん。 ここで、 privateとå…Ĩ力すると、原際ãĢはより多くぎ文字を書きčžŧã‚€ã“ã¨ãŒã§ãã‚‹ãŸã‚ã€ã‚ˇãƒ§ãƒŧトã‚ĢットãĢãĒりぞすīŧšslightly_smiling_faceīŧš

ãžãŸã€ãƒĄã‚ŊッドはおうですかīŧŸ いくつかぎäģŽæƒŗãƒĄã‚Ŋッドはã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸで始ぞるため、単一ぎã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸをäŊŋį”¨ã—ãĻそれらをプナイベãƒŧトとしãĻマãƒŧクすることはできぞせん。 ただし、2つぎã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸをäŊŋį”¨ã™ã‚‹ã“ともできぞす。これãĢã‚ˆã‚Šã€é•ˇããĒるというįŠ į‰˛ã‚’払ãŖãĻįĢļ合を回éŋできぞす。 ぞた、į†ãĢかãĒãŖãĻいる場合はPythonぎčĻå‰‡ãĢ垓うというã‚ĸイデã‚ĸも気ãĢå…ĨãŖãĻいぞす。「ダãƒŗダãƒŧã€ã¯ã€ããŽč¨€čĒžã§ã—ばらくぎ間äēē気がありぞした。

ã‚ˇãƒ§ãƒŧトã‚ĢットとしãĻ襨į¤ēすることを意å›ŗしãĻいるとは思いぞせん。äģŖわりãĢ、クナ゚ぎ外部で「_」をäŊŋį”¨ã—ãĻプナイベãƒŧト変数ãĢã‚ĸクã‚ģã‚šã™ã‚‹ã¨ã„ã†č€ƒãˆæ–šã§ã™ã€‚ ã‚ˇãƒŗã‚ŋãƒƒã‚¯ã‚šã‚ˇãƒĨã‚Ŧãƒŧは、そぎ原čŖ…æ–šæŗ•ãĢãĒりぞす。 Pythonぎやり斚とæœŦčŗĒįš„ãĢ同じです。 しかし、そうです、それはæœŦåŊ“です。PythonãŽå ´åˆã€æ§‹æ–‡ã‚ˇãƒĨã‚Ŧãƒŧは多くぎå…Ĩ力をį¯€į´„しぞすが、それはそれが愚かãĒé•ˇã„ã‚‚ãŽãĢエイãƒĒã‚ĸ゚するからです。 įŸ­ã„もぎãĢエイãƒĒã‚ĸã‚ˇãƒŗグする斚がåŽŗ密ãĢå„ĒれãĻいるため、エイãƒĒã‚ĸã‚šã‚’įŸ­ãã—ãĻ、エイãƒĒã‚ĸ゚がįŸ­ã™ãŽã‚‹ãŸã‚ãĢそぎ構文ぎįŗ–čĄŖ構文をäŊŋį”¨ã—ãĒいことを選択すると、プナイベãƒŧト変数をã‚ĩポãƒŧトするåŋ…čĻãŒã‚るかおうかãĢãĒりぞす。 åŋ…ずしもそうするåŋ…čĻã¯ã‚りぞせん。ãƒĻãƒŧã‚ļãƒŧãĢ変数ぎ前ãĢã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸをäģ˜ã‘るか、į‹Ŧč‡ĒぎčĻå‰‡ã‚’選択するだけです。 これは、JavaとC ++ãĢé–ĸåŋƒãŽã‚ã‚‹äēē々ぎためぎもぎであり、「_ myvariable」をæ…Ŗ䞋としãĻプナイベãƒŧトとしãĻäŊŋį”¨ã™ã‚‹ãŽã§ã¯ãĒく、「private var myvariableã€ã¨č¨˜čŋ°ã—ぞす。これは、OOPぎ世į•Œã‹ã‚‰æĨたときãĢã€ä¸Ąæ–šãŒæ­ŖįĸēãĢ達成したとしãĻも、åĨ‡åĻ™ãĢ感じぞす。同じこと。 äēŒé‡ã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸはPythonぎ構文と非常ãĢã‚ˆãä¸€č‡´ã™ã‚‹ãŽã§ã€į‰šãĢ_がäģ–ぎもぎとįĢļ合する場合は、į§ã‚‚そぎ構文ãĢčŗ›æˆã§ã™ã€‚

むしろ、゚ã‚ŋイãƒĢぎčĻå‰‡ã¨ã—ãĻぎãŋčĒ¤č§Ŗされる可čƒŊ性ぎあるもぎäģĨ外ぎ動äŊœã‚’明į¤ēįš„ãĢ厚įžŠã™ã‚‹ã‚­ãƒŧワãƒŧドがåŋ…čĻã§ã™ã€‚ privateがį§ãŽįĨ¨ã‚’į˛åž—しぞす。

č­°čĢ–ãĢįĢをつけるīŧšã€Œãƒ—ナイベãƒŧãƒˆã€ãƒĄãƒŗバãƒŧぎPythonã‚šã‚ŋイãƒĒãƒŗグčĻå‰‡ã¯ã€åå‰ãŽå‰ãĢã‚ĸãƒŗダãƒŧã‚šã‚ŗã‚ĸをčŋŊ加することです。これは、 _ready() 、 _inputãĒおぎ一čˆŦįš„ãĒイベãƒŗãƒˆãƒĄã‚ŊッドでåˆĨぎį›Žįš„でgdscriptãĢよãŖãĻ_すでãĢ_äŊŋį”¨ã•ã‚ŒãĻいぞす。いくつか_input 、およãŗ_physics_processです。 それらはプナイベãƒŧトãĢãĒãŖãĻいぞすかīŧŸ プナイベãƒŧトキãƒŧワãƒŧドをčŋŊåŠ ã™ã‚‹ã¨ã€ã“ã‚Œã‚‰ãŽãƒĄã‚ŊッドとおぎようãĢį›¸äē’äŊœį”¨ã—ぞすかīŧŸ protectedようãĒäģ–ぎキãƒŧワãƒŧドも原čŖ…するåŋ…čĻãŒã‚りぞすかīŧŸ

いずれãĢせよ、į§ã¯ã™ãšãĻ、ãƒĻãƒŧã‚ļãƒŧãĢčĻå‰‡ã‚’厚įžŠã•ã›ã‚‹ãŽã§ã¯ãĒく、_設計ãĢよãŖãĻ_åˆļ限įš„ãĒデã‚ŖãƒŦクテã‚Ŗブを遊į”¨ã™ã‚‹ã“とãĢ専åŋĩしãĻいぞす。 しかし、原čŖ…ãŽč¤‡é›‘ã•ã‚’č€ƒãˆã‚‹ã¨ã€ãƒ—ãƒŠã‚¤ãƒ™ãƒŧãƒˆã‚¯ãƒŠã‚šãŽãƒĄãƒŗバãƒŧが意å›ŗした攚善を提䞛するかおうかはわかりぞせん。 API全äŊ“ã‚‚å†æ¤œč¨Žã™ã‚‹åŋ…čĻãŒã‚ると思いぞす。 言čĒžå…¨äŊ“は厌全ãĢį•°ãĒるパナダイムを持ãŖãĻいるでしょう。

ええ、čĒ°ã‹ãŒã™ã§ãĢそれを指摘しぞした。 īŧˆCalinouぎåŋœį­”を参į…§ã—ãĻくださいīŧ‰äēŒé‡ä¸‹įˇšãŒé€˛ã‚€ãšãé“です。 Pythonと同じです。

į§ãŽ2c。 Pythonでは、 _ã§å§‹ãžã‚‹ã‚¯ãƒŠã‚šãƒĄãƒŗバãƒŧへぎã‚ĸクã‚ģã‚šã‚’åĻ¨ã’るもぎはãĒく、 __ãĢé–ĸする内部įŸĨč­˜ã‚‚åŋ…čĻã§ã™ã€‚

それはすずãĻ意å›ŗをį¤ēすことです。 å“˛å­Ļは、į§ãŸãĄå…¨å“ĄãŒå¤§äēēであり、おそらくプナイベãƒŧトãĒ変数ぞたはé–ĸ数ãĢæœŦåŊ“ãĢã‚ĸクã‚ģ゚するåŋ…čĻãŒã‚るかおうかを判断できるということです。 そしãĻ、そうする場合、į§ãŸãĄã¯č‡Ēåˆ†ãŸãĄã§įĩæžœãĢ寞å‡Ļするåŋ…čĻãŒã‚りぞす。

@sanchopanca

  1. GDScriptはPythonではありぞせん。
  2. ロジックãĢåž“ãŖãĻ、厚数もåŋ…čĻã‚りぞせんīŧˆvar CONSTANT = 1īŧ‰ã€‚
  3. čĒ°ã‚‚が__をäŊŋうぎがåĨŊきというわけではありぞせん。

į§ã¯privateキãƒŧワãƒŧドをäŊŋį”¨ã—ãĻいぞすが、äē’換性を損ãĒうことはありぞせん。
äģŖわりãĢ、 _をäŊŋį”¨ã—ãĻfuncとvar非å…Ŧ開ãĢすると、äģ–ぎį†į”ąã§ãã‚Œã‚’äŊŋį”¨ã™ã‚‹ã¨ã€ã„くつかぎį‚šã§įŠļæŗãŒå¤‰ã‚ã‚Šãžã™īŧˆ _はé–ĸæ•°ãŽãƒ‘ãƒŠãƒĄãƒŧã‚ŋãƒŧでぎãŋäŊŋį”¨ã—ぞすīŧ‰ īŧ‰ã€‚

これは、新しい静įš„åž‹äģ˜ã‘抟čƒŊを思いå‡ēさせぞす。こぎプナイベãƒŧト抟čƒŊとäģŽæƒŗ抟čƒŊは同じようãĢ抟čƒŊしぞす。
それはより明įĸēãĒã‚ŗãƒŧドベãƒŧã‚šã‚’æäž›ã—ã€ã‚ˆã‚Šč‰¯ã„ã‚¨ãƒŠãƒŧ検å‡ēã€ã‚ˆã‚Šč‰¯ã„ã‚Ēãƒŧトã‚ŗãƒŗプãƒĒãƒŧト、そしãĻã‚ŗãƒŧドぎč‡Ē動文書化も提䞛しぞす。
čĒ°ã‹ãŒã‚ãĒたぎã‚ŗãƒŧドをčĒ­ã‚“だら、åŊŧらはそれがäŊ•ã‚’するぎかをよりよくį†č§Ŗするでしょう。

開į™ēチãƒŧムãĢとãŖãĻ、2つぎ新しいキãƒŧワãƒŧドを原čŖ…するぎはおれãģおé›Ŗしいぎだろうかと思いぞす。
įĸēかãĢã‚ŋイピãƒŗã‚°ã‚ˇã‚šãƒ†ãƒ ã‚ˆã‚Šã‚‚ã¯ã‚‹ã‹ãĢį°Ąå˜ã§ã€å¤šããŽäžĄå€¤ã‚’提䞛しぞす。
開į™ēチãƒŧムぎčĒ°ã‹ãŒį§ãĢäŊ•ã‚’すずきかãĢついãĻぎ指針を与えることができれば、į§ã¯æ­Ŗį›´ãĢãĒるぎを手äŧãŖãĻ喜んでいぞすīŧ

プナイベãƒŧトキãƒŧワãƒŧドとäŋč­ˇã•ã‚ŒãŸã‚­ãƒŧワãƒŧドをčŋŊ加するためぎ投įĨ¨ã‚’もう1つčŋŊ加するだけです。
äģ–ぎ開į™ēč€…ãŒäŊŋį”¨ã™ã‚‹ã‚ŗãƒŧドを書いたことがあれば、それãĢ反寞することはできぞせん。
キãƒŧワãƒŧドをčŋŊ加することãĢ寞しãĻすずãĻがこぎトピックをチェックすることができぞすīŧš
https://softwareengineering.stackexchange.com/questions/143736/why-do-we-need-private-variables

åŧ•ãįļšãGDscriptをäŊŋį”¨ã—ぞすが、そぎ過į¨‹ã§GDscriptを攚善しãĻãŋぞせんか。

_、__、___ãĒおは、ã‚ŋã‚¤ãƒ—ã‚’ææĄˆã™ã‚‹ãŸã‚ãĢ変数名ãĢプãƒŦフã‚Ŗック゚をčŋŊ加するぎと同じくらい愚かです。
intAge、strName、bIsAlive ...これらはすずãĻ、æŦ čŊしãĻã„ã‚‹č¨€čĒžæŠŸčƒŊぎãŋをį¤ēしãĻいぞす。
したがãŖãĻ、GDScriptをPythonやäģ–ãŽč¨€čĒžã¨æ¯”čŧƒã—ãĒくãĻも、開į™ēč€…ã¯ãƒãƒŧãƒĒãƒŗã‚°ã‚’åŽŸčĄŒã—ãĻ、これら2つぎキãƒŧワãƒŧドがåŋ…čĻã‹ãŠã†ã‹ã‚’įĸēčĒã§ããžã™;īŧ‰

こぎ抟čƒŊが原čŖ…されãĻいる場合は、C ++ぎ斚æŗ•ãŒé¸æŠžã•ã‚Œã‚‹ã“ã¨ã‚’éĄ˜ãŖãĻいぞす。 すずãĻぎåŽŖč¨€ãŽå‰ãĢある「private」ぞたは「public」キãƒŧワãƒŧドは、Cīŧƒã‚’čĒ­ãŋãĢくくしぞす。

į§ã¯å€‹äēēįš„ãĢC ++ぎ斚æŗ•ã‚’åĨŊãŋぞせん。ãĒぜãĒら、C ++ぎå…Ĩ力構文がãĒく、デフりãƒĢトですずãĻがå…Ŧ開されるからです。 į§ã¯ã€privateキãƒŧワãƒŧãƒ‰ãŒã‚ãžã‚ŠčĄ¨į¤ēされãĒいäģĨ上ãĢ、åˆĨãŽčĄŒã‚’čŋŊåŠ ã—ãŸã‚Šã€æ–°ã—ã„čĄŒãĢį§ģ動したりせずãĢ変数をprivateãĢč¨­åŽšã§ãã‚‹å€¤ã‚’æŒãŖãĻいぞす。

private var foo : String = "foobar"は、æ—ĸ存ぎexportおよãŗonreadyキãƒŧワãƒŧドぎäŊŋį”¨æŗ•ã¨ã‚‚ä¸€č‡´ã—ãĻいぞす。

抟čƒŊãŽææĄˆãŒGodotãŽææĄˆãƒĒポジトãƒĒでčŋŊčˇĄã•ã‚Œã‚‹ã‚ˆã†ãĢãĒãŖたため、 httpsīŧš//github.com/godotengine/godot-proposals/issues/641をå„Ē先しãĻįĩ‚äē†ã—ぞす。

こぎペãƒŧジはåŊšãĢįĢ‹ãĄãžã—たかīŧŸ
0 / 5 - 0 評価