[java] एंड्रॉइड UserManager.isUserAGoat () के लिए उचित उपयोग के मामले?



Answers

मुझे नहीं पता कि यह "आधिकारिक उपयोग केस" था, लेकिन निम्नलिखित जावा में एक चेतावनी उत्पन्न करता है (जो return स्टेटमेंट के साथ मिश्रित होने return संकलन त्रुटियों का उत्पादन कर सकता है, जिससे पहुंचने योग्य कोड नहीं होता है):

while (1 == 2) { // Note that "if" is treated differently
    System.out.println("Unreachable code");
}

हालांकि यह कानूनी है:

while (isUserAGoat()) {
    System.out.println("Unreachable but determined at runtime, not at compile time");
}

इसलिए मैं अक्सर कोड कोड को डमी करने के सबसे तेज़ तरीके के लिए एक मूर्खतापूर्ण उपयोगिता विधि लिखता हूं, फिर डिबगिंग को पूरा करने में इसे सभी कॉल मिलते हैं, इसलिए कार्यान्वयन में बदलाव नहीं होता है, इसका उपयोग इसके लिए किया जा सकता है।

JLS बताता है कि if (false) विशिष्ट कारण के लिए "पहुंचने योग्य कोड" ट्रिगर नहीं करता है, तो यह डीबग झंडे के लिए समर्थन तोड़ देगा, यानी मूल रूप से इस उपयोग के मामले (एच / टी @auselen)। (उदाहरण के लिए static final boolean DEBUG = false; )।

if मैं अधिक अस्पष्ट उपयोग के मामले का उत्पादन कर रहा हूं, if मैं बदल गया। मेरा मानना ​​है कि आप ग्रहण की तरह अपने आईडीई की यात्रा कर सकते हैं, इस व्यवहार के साथ, लेकिन यह संपादन भविष्य में 4 साल है, और मेरे पास खेलने के लिए ग्रहण पर्यावरण नहीं है।

Question

मैं एंड्रॉइड 4.2 में पेश किए गए नए एपीआई देख रहा था। UserManager क्लास को देखते हुए मैं निम्नलिखित विधि में आया:

 public boolean isUserAGoat()

यह निर्धारित करने के लिए प्रयोग किया जाता है कि यह कॉल करने वाला उपयोगकर्ता टेलीपोर्टेशन के अधीन है या नहीं।

यह लौटाता है कि उपयोगकर्ता यह कॉल कर रहा है या नहीं।

इसका उपयोग कब और कब किया जाना चाहिए?




ग्रह के सबसे दूरस्थ पहाड़ों में, बकरी की एक उन्नत प्रजाति है जो वर्तमान में मनुष्यों की तरह फोन का उपयोग करने में सक्षम है!

लीक फुटेज: youtu.be/YJwZMUn7GdQ

Google ने इसे देखा होगा और प्रौद्योगिकी उन्नति की अगली पंक्ति में रहने के प्रयास में उनके लिए समर्थन प्रदान करने का निर्णय लिया होगा।




बकरियों और बकरी के आधार पर ईस्टर अंडे के लिए Google को गंभीर पसंद है। इसके बारे में पिछली स्टैक ओवरफ़्लो पोस्ट भी रही है

जैसा कि पिछले पदों में उल्लेख किया गया है, यह क्रोम टास्क मैनेजर के भीतर भी मौजूद है ( यह पहली बार 200 9 में जंगली में दिखाई दिया था ):

<message name="IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN" desc="The goats teleported column">
    Goats Teleported
</message>

और फिर विंडोज़ में, 2010 की शुरुआत में क्रोम के लिनक्स और मैक संस्करण )। "बकरी टेलीपोर्ट" की संख्या वास्तव में यादृच्छिक है :

 int TaskManagerModel::GetGoatsTeleported(int index) const {
     int seed = goat_salt_ * (index + 1);
     return (seed >> 16) & 255;
 }

बकरियों के अन्य Google संदर्भों में शामिल हैं:

जहां तक ​​मैं कह सकता हूं, बकरियों और Google के सबसे शुरुआती सहसंबंध मूल "मूसिंग विद बकरी" ब्लॉग पोस्ट में हैं।

हम सुरक्षित रूप से यह मान सकते हैं कि यह केवल ईस्टर अंडे है और false वापसी के अलावा, कोई वास्तविक दुनिया का उपयोग नहीं है।




@ डीजेक्लिन answer (जिस तरह से अच्छा जवाब!) को पूरक करना, इस फ़ंक्शन कॉल को आईडीई में ब्रेकपॉइंट रखने के लिए डमी कोड के रूप में भी इस्तेमाल किया जा सकता है जब आप कुछ विशिष्ट पुनरावृत्ति या किसी विशेष रिकर्सिव कॉल में रुकना चाहते हैं, उदाहरण के लिए:

isUserAGoat() को डमी वेरिएबल घोषणा के बजाए इस्तेमाल किया जा सकता है जो आईडीई में एक चेतावनी के रूप में दिखाया जाएगा और, एक्लिप्स विशेष मामले में, ब्रेकपॉइंट मार्क को बंद कर देगा, जिससे इसे सक्षम / अक्षम करना मुश्किल हो जाएगा। यदि विधि को एक सम्मेलन के रूप में उपयोग किया जाता है, तो सभी आमंत्रणों को बाद में कुछ स्क्रिप्ट द्वारा फ़िल्टर किया जा सकता है (प्रतिबद्ध चरण के दौरान शायद?)।

Google लोग भारी ग्रहण उपयोगकर्ता हैं (वे अपनी कई परियोजनाएं एक्लिप्स प्लगइन के रूप में प्रदान करते हैं: एंड्रॉइड एसडीके, जीएई, इत्यादि), इसलिए @ डीजेक्लिन जवाब और यह पूरक उत्तर बहुत कम समझ में आता है (कम से कम मेरे लिए)।




एपीआई 21 (पहला एंड्रॉइड 5.0 / लॉलीपॉप एसडीके) के रूप में , यह पता लगाता है कि बकरी सिम्युलेटर ऐप इंस्टॉल है या नहीं:

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 *
 * <p>As of {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this method can
 * now automatically identify goats using advanced goat recognition technology.</p>
 *
 * @return Returns true if the user making this call is a goat.
 */
public boolean isUserAGoat() {
    return mContext.getPackageManager()
            .isPackageAvailable("com.coffeestainstudios.goatsimulator");
}

इससे यह स्पष्ट हो जाना चाहिए कि if (false) एक संभावित विनाशकारी रणनीति है if (false) इसे चेतावनी मुक्त के रूप में उपयोग करने का डीजेक्लिन का सुझाव । जो पहले हर डिवाइस के लिए false लौटा था, वह अब एक यादृच्छिक यादृच्छिक मूल्य देता है: यदि इसे आपके कोड में काफी गहरा दफनाया गया था तो यह पता लगाने में काफी समय लग सकता है कि आपकी नई बग कहां से आ रही हैं।

निचली पंक्ति: यदि आप किसी विधि के कार्यान्वयन को नियंत्रित नहीं करते हैं और एपीआई दस्तावेज में बताए गए उद्देश्यों के अलावा इसका उपयोग करने का निर्णय लेते हैं, तो आप परेशानी के लिए जा रहे हैं।




Related