जावा
अवधि। पूर्ण विराम। कहानी का अंत।
कहा से शुरुवात करे? ओह, मुझे पता है कि कहां से शुरू करना है: जावा का पागलपन जटिल और बदसूरत और बेवकूफ और स्वाभाविक रूप से टूटी हुई जेनरिक। क्या मुझे कुछ और कहने की ज़रूरत है? :( ठीक है, फिर: प्रकार मिटाएँ ।
फिर गैर-निर्धारक संसाधन प्रबंधन है। केवेल फुटचर!
आगे क्या है? ओह, हाँ: जावा के बेवकूफ रीजैक्स मेरे सबसे चिड़चिड़े होते हैं, जो बीफ खाते हैं। मैं यह नहीं गिन सकता कि मैंने कितनी बार बैकस्लैश नहीं किए हैं। यह इस सहस्राब्दी से किसी भी यूनिकोड गुणों तक पहुंच न होने से भी बदतर है - जो कि पूर्ण बैल है। दस फ्रेशिंग डेट ऑफ़ आउट ऑफ़ डेट !!! पूरी तरह से बेकार। कूडेदान मैं डालो।
फिर यह बग है कि चरित्र वर्ग शॉर्टकट गैर-एएससीआईआई पर काम नहीं करते हैं। क्या शाही दर्द है! और उपयोग करने पर भी विचार न करें \p{javaWhiteSpace}
; यह कई बहुत सामान्य यूनिकोड व्हाट्सएप कोड बिंदुओं के साथ सही काम नहीं करता है।
क्या आप जानते हैं कि एक \p{javaJavaIdentifierStart}
संपत्ति है? वे क्या सोच रहे थे? तो ख़ुशी है कि उन्हें ऐसे स्मार्ट पीपर मिल गए जो सख्त सख्त थे।
कभी CANON_EQ ध्वज का उपयोग करने का प्रयास किया गया है? क्या आप जानते हैं कि वास्तव में ऐसा होता है, और यह क्या नहीं करता है? तथाकथित "यूनिकोड केस" के बारे में कैसे? सामान्य आवरण वाली चीजों का एक गुच्छा बस काम नहीं करता है।
फिर वे बनाए रखने योग्य regexes लिखना मुश्किल बनाते हैं। जावा अभी भी यह पता नहीं लगा पाया है कि मल्टीलाइन स्ट्रिंग्स को कैसे लिखना है, इसलिए आप इस तरह से पागल बातें लिखना समाप्त करते हैं:
"(?= ^ [A-Z] [A-Za-z0-9\\-] + $) \n"
+ "(?! ^ .* \n"
+ " (?: ^ \\d+ $ \n"
+ " | ^ [A-Z] - [A-Z] $ \n"
+ " | Invitrogen \n"
+ " | Clontech \n"
+ " | L-L-X-X \n"
+ " | Sarstedt \n"
+ " | Roche \n"
+ " | Beckman \n"
+ " | Bayer \n"
+ " ) # end alternatives \n"
+ ") # end negated lookahead \n"
वे सभी नए समाचार क्या हैं? ओह, सिर्फ जावा मूर्खता। उन्होंने पर्ल कमेंट्स का इस्तेमाल किया, न कि जावा कमेंट्स ( बेवकूफों! ) का, जो लाइन के अंत तक चलते हैं। इसलिए यदि आप उन लोगों को \n
वहां नहीं रखते हैं, तो आप अपने बाकी पैटर्न को काट देते हैं। दुह और डबल दु!
जावा में regexes का उपयोग न करें: आप बस चीजों को तोड़ना चाहते हैं, यह सब इतना दर्दनाक और टूट गया है। मुझे विश्वास नहीं हो रहा है कि लोग इस पर ध्यान देंगे। कुछ नहीं ।
फिर हम एन्कोडिंग के साथ जावा के बेवकूफ बकवास के बारे में बात करना शुरू कर सकते हैं। सबसे पहले, यह तथ्य है कि डिफ़ॉल्ट प्लेटफ़ॉर्म एन्कोडिंग हमेशा कुछ लंगड़ा 8-बिट एन्कोडिंग है, भले ही जावा के चार्चर्स यूनिकोड हैं। फिर वहाँ है कि कैसे वे एन्कोडिंग त्रुटि पर अपवाद नहीं उठाते हैं। आपको बकवास लगने की गारंटी है। या इसके बारे में कैसे:
OutputStreamWriter(OutputStream out)
Creates an OutputStreamWriter that uses the default character encoding.
OutputStreamWriter(OutputStream out, Charset cs)
Creates an OutputStreamWriter that uses the given charset.
OutputStreamWriter(OutputStream out, CharsetEncoder enc)
Creates an OutputStreamWriter that uses the given charset encoder.
OutputStreamWriter(OutputStream out, String charsetName)
Creates an OutputStreamWriter that uses the named charset.
क्या फर्क पड़ता है? क्या आप जानते हैं कि एन्कोडिंग त्रुटि होने पर उनमें से केवल एक ही अपवाद करेगा? बाकी बस उन्हें थूथन देते हैं।
तो फिर जावा वर्णों की मूढ़ता एक चरित्र को धारण करने के लिए पर्याप्त नहीं है! वे क्या सोच रहे हैं? इसलिए मैं उन्हें चारित्र कहता हूं। आपको इस तरह से कोड लिखना होगा यदि आप उम्मीद करते हैं कि यह सही काम करेगा:
private static void say_physical(String s) {
System.out.print("U+");
for (int i = 0; i < s.length(); i++) {
System.out.printf("%X", s.codePointAt(i));
if (s.codePointAt(i) > Character.MAX_VALUE) { i++; } // UG!
if (i+1 < s.length()) { System.out.printf("."); }
}
}
और जो कभी ऐसा करने की सोचता है? किसी के आगे नहीं।
इसमें कितने किरदार हैं "\uD83D\uDCA9"
? एक अथवा दो? निर्भर करता है कि आप उन्हें कैसे गिनते हैं। रेगेक्स इंजन निश्चित रूप से तार्किक पात्रों से संबंधित है, इसलिए एक पैटर्न ^.$
सफल होगा और एक पैटर्न ^..$
विफल हो जाएगा। इस पागलपन का प्रदर्शन यहाँ किया गया है:
String { U+61, "\u0061", "a" } =~ /^.$/ => matched.
String { U+61, "\u0061", "a" } =~ /^..$/ => failed.
String { U+61.61, "\u0061\u0061", "aa" } =~ /^.$/ => failed.
String { U+61.61, "\u0061\u0061", "aa" } =~ /^..$/ => matched.
String { U+DF, "\u00DF", "ß" } =~ /^.$/ => matched.
String { U+DF, "\u00DF", "ß" } =~ /^..$/ => failed.
String { U+DF.DF, "\u00DF\u00DF", "ßß" } =~ /^.$/ => failed.
String { U+DF.DF, "\u00DF\u00DF", "ßß" } =~ /^..$/ => matched.
String { U+3C3, "\u03C3", "σ" } =~ /^.$/ => matched.
String { U+3C3, "\u03C3", "σ" } =~ /^..$/ => failed.
String { U+3C3.3C3, "\u03C3\u03C3", "σσ" } =~ /^.$/ => failed.
String { U+3C3.3C3, "\u03C3\u03C3", "σσ" } =~ /^..$/ => matched.
String { U+1F4A9, "\uD83D\uDCA9", "💩" } =~ /^.$/ => matched.
String { U+1F4A9, "\uD83D\uDCA9", "💩" } =~ /^..$/ => failed.
String { U+1F4A9.1F4A9, "\uD83D\uDCA9\uD83D\uDCA9", "💩💩" } =~ /^.$/ => failed.
String { U+1F4A9.1F4A9, "\uD83D\uDCA9\uD83D\uDCA9", "💩💩" } =~ /^..$/ => matched.
वह मूढ़ता सभी है क्योंकि आप पूरी तरह से उचित नहीं लिख सकते हैं \u1F4A9
, न ही आपको कोई चेतावनी मिलती है कि आप ऐसा नहीं कर सकते। यह सिर्फ गलत काम करता है।
Stoooopid।
जब हम उस पर होते हैं, तो पूरी \uXXXX
धारणा जन्मजात रूप से मृत होती है। जावा प्रीप्रोसेसर ( हाँ, आपने मुझे सुना है ) जावा के होने से पहले इसे प्राप्त कर लेता है, इसलिए आपको पूरी तरह से उचित चीजें लिखने से मना किया जाता है "\u0022"
, क्योंकि जब तक जावा देखता है, तब तक इसका प्रीप्रोसेसर बदल गया है """
, इसलिए आप हार जाते हैं। ओह इंतजार, नहीं करता है, तो यह एक regex में है! तो आप "\\u0022"
बस ठीक उपयोग कर सकते हैं।
Riiiiiiiight!
क्या आपको पता है कि isatty(0)
कॉल करने के लिए जावा में कोई रास्ता नहीं है ? आपको ऐसे विचार करने की अनुमति भी नहीं है। यह आपके लिए अच्छा नहीं होगा।
और फिर वहाँ पूरी क्लासपैथ घृणा है।
या तथ्य यह है कि आपके जावा स्रोत फ़ाइल के एन्कोडिंग को उसी स्रोत फ़ाइल में निर्दिष्ट करने का कोई तरीका नहीं है ताकि आप इसे खो न दें? एक बार फिर से मैं यह जानने की माँग करता हूँ: वह क्या है जो उन्हें लगता है कि
पागलपन बंद करो! मैं विश्वास नहीं कर सकता कि लोग इस कचरे के साथ डाल रहे हैं। यह पूरी तरह से मजाक है। मैं नहीं बल्कि वॉलमार्ट अभिवादन करने वाले की तुलना में अपमानजनक जावा पागलपन के स्लिंग्स और तीरों को पीड़ित करूंगा। यह सब टूट गया है, और वे न केवल इसे ठीक कर सकते हैं, वे इसे ठीक नहीं करेंगे ।
यह उसी लोमड़ी-अंगूर वाले लोगों द्वारा किया जाता है, जो खुद को एक ऐसी भाषा पर गर्व करते हैं, जिसने एक printf()
फ़ंक्शन को गैरकानूनी बना दिया । जी, यकीन है कि असली अच्छी तरह से काम किया, हालांकि यह नहीं था !?
सरासर सुन्न। कुतिया-थप्पड़ उनके लिए बहुत दयालु है। अगर मैं असेंबलर में प्रोग्राम करना चाहता हूं, तो मैं करूंगा। यह एक निंदनीय भाषा नहीं है। राजा ने कोई कपड़ा नहीं पहना है।
हम इससे नफरत करते हैं। हम इससे हमेशा के लिए नफरत करते हैं । यह मर मर चलो मरने !