ठीक है, कमजोर बनाम मजबूत टाइपिंग बहुत अस्पष्ट रूप से परिभाषित है। इसके अलावा, चूंकि निकटतम 'टाइपिंग' का एक सामान्य उपयोग है, उन चीजों को संदर्भित करना जो प्रकारों को बनाना मुश्किल बनाते हैं, जो आगे भी मजबूत प्रकार के सिस्टम का वर्णन करने के लिए कुछ भी नहीं छोड़ता है। यह कहने जैसा है कि यदि आप 30 से कम एलबीएस ले सकते हैं तो आप कमजोर हैं, और हर कोई जो अधिक उठा सकता है वह 'मजबूत' की एक ही श्रेणी में है - एक भ्रामक भेद।
इसलिए मुझे परिभाषा पसंद है:
- कमजोर टाइप की गई प्रणालियाँ आपको कुछ चीज़ें करने से रोकने के लिए प्रकारों का उपयोग करती हैं (जैसे गलतियाँ)
- मजबूत टाइप किए गए सिस्टम आपके लिए चीजों को करने के लिए प्रकारों का उपयोग करते हैं
मुझे आपके लिए क्या करना चाहिए? ठीक है, चलो एक छवि रूपांतरण एपीआई को सर्वेंट फ्रेमवर्क में लिखने की जांच करें (हास्केल में, लेकिन आपको वास्तव में इसे अनुसरण करने के लिए जानने की आवश्यकता नहीं है, आप देखेंगे ...)
{-# LANGUAGE
TypeOperators,
DataKinds
#-}
import Codec.Picture
import Data.Proxy
import Network.Wai.Handler.Warp (run)
import Servant
import Servant.JuicyPixels
main :: IO ()
main = run 8001 conversion
यह कह रहा है कि हम सर्वेंट पैकेज और सर्वेंट के लिए JuicyPixels प्लगइन सहित कुछ मॉड्यूल चाहते हैं, और प्रोग्राम का मुख्य प्रविष्टि वारप बैकएंड का उपयोग करके सर्वर के रूप में पोर्ट 8001 पर 'रूपांतरण' फ़ंक्शन को चलाना है। भाषा को थोड़ा नजरअंदाज करें।
conversion :: Application
conversion = serve (Proxy :: Proxy ConversionApi) handler
यह कह रहा है कि रूपांतरण फ़ंक्शन एक सर्वर है जहां एपीआई को 'कनवर्ज़नएपीआई' प्रकार से मेल खाना चाहिए और अनुरोध फ़ंक्शन द्वारा नियंत्रित किए जाते हैं handler
type ConversionApi
= ReqBody '[BMP, GIF, JPEG 50, PNG, TIFF, RADIANCE] DynamicImage
:> Post '[BMP, GIF, JPEG 50, PNG, TIFF, RADIANCE] DynamicImage
यह ConvesionApi
प्रकार निर्दिष्ट कर रहा है । यह कहता है कि हमें '' बीएमपी, GIF, JPEG 50, PNG, TIFF, RADIANCE] सूची द्वारा निर्दिष्ट आवक प्रकारों को स्वीकार करना चाहिए और उन्हें एक डायनेमिकइमेज के रूप में संभालना चाहिए, और यह कि हमें डायनेमिकइमेज को उसी श्रेणी की सामग्री में परिवर्तित करके वापस करना चाहिए। प्रकार के। चिंता मत करो कि वास्तव में क्या है:> इसका मतलब है, इसे अभी के लिए खुश जादू के रूप में सोचें।
इसलिए, मेरी पसंदीदा परिभाषा को देखते हुए, एक कमजोर टाइप सिस्टम अब चीजों को सुनिश्चित कर सकता है:
- आप गलत आउटगोइंग सामग्री प्रकार वापस नहीं करते हैं
- आप गलत सामग्री प्रकार के रूप में आने वाले अनुरोध को पार्स नहीं करते हैं
- यदि हमारा सर्वर अधिक जटिल था, तो यह हमें विकृत URI बनाने से रोकेगा, लेकिन हम वास्तव में लिंक को शामिल करने के लिए कोई HTML पृष्ठ नहीं लौटा रहे हैं (और प्रकार सुनिश्चित करता है कि हम नहीं कर सकते!)
- वास्तव में महत्वाकांक्षी कमजोर टाइपिंग सिस्टम यह सुनिश्चित करने के लिए भी जांच कर सकता है कि हम सभी आवक और आउटगोइंग सामग्री प्रकारों को आसानी से संभाल रहे हैं, इस प्रकार से केवल एक बाधा के बजाय विनिर्देश दस्तावेज के रूप में कार्य करने की अनुमति मिलती है।
सभी बुलंद लक्ष्य, लेकिन वास्तव में एक पर्याप्त रूप से टाइप की गई प्रणाली के रूप में अर्हता प्राप्त करने के लिए पर्याप्त नहीं है, उपरोक्त परिभाषा। और अब हमें वास्तव में राइटिंग कोड का कठिन हिस्सा प्राप्त करना होगा जो इस विनिर्देश का अनुसरण करता है। वास्तव में मजबूत प्रकार की प्रणाली में, हम लिखते हैं:
handler = return
और फिर हम कर रहे हैं। यही है, लिखने के लिए कोई और कोड नहीं है । यह पूरी तरह से ऑपरेशनल वेब सर्वर (किसी भी टाइपोस को याद नहीं किया गया है)। प्रकार ने संकलक को वह सब कुछ बता दिया है जो उसे हमारे वेब सर्वर को उन प्रकारों और पैकेजों (मॉड्यूलों) से बनाने की आवश्यकता है जिन्हें हमने परिभाषित और आयात किया है।
तो, आप प्रमुख एप्लिकेशन स्केल पर ऐसा करना कैसे सीखते हैं? ठीक है, यह वास्तव में छोटे पैमाने के अनुप्रयोगों में उनका उपयोग करने से बहुत अलग नहीं है। जो प्रकार निरपेक्ष होते हैं, उन्हें इससे संबंधित कोड कितना लिखा जाता है, इसकी परवाह नहीं है।
रन टाइम टाइप इंस्पेक्शन एक ऐसी चीज है जिससे आप शायद बचना चाहते हैं, क्योंकि यह बहुत बड़ी मात्रा में फायदा पहुंचाता है और टाइप करने के बजाय आपके प्रोजेक्ट को काम करने के लिए और जटिल बना देता है, बजाय इसके कि आप चीजों को सरल बना सकें।
जैसे, यह ज्यादातर प्रकार के साथ चीजों को मॉडलिंग करने का अभ्यास है। मॉडलिंग की चीजों के दो मुख्य तरीके (या सामान्य रूप से चीजें बनाना) नीचे और ऊपर नीचे हैं। शीर्ष नीचे संचालन के उच्चतम स्तर के साथ शुरू होता है, और जैसा कि आप मॉडल का निर्माण करते हैं आपके पास ऐसे हिस्से हैं जहां आप बाद में मॉडलिंग को समाप्त कर रहे हैं। बॉटम अप मॉडलिंग का मतलब है कि आप बेस ऑपरेशंस से शुरू करते हैं, जैसे आप बेस फंक्शंस से शुरू करते हैं, फिर बड़े और बड़े मॉडल बनाते हैं जब तक कि आपने प्रोजेक्ट के संचालन पर पूरी तरह से कब्जा नहीं कर लिया। नीचे का निर्माण अधिक ठोस और तेजी से होने की संभावना है, लेकिन टॉप डाउन आपके निचले स्तर के मॉडल को बेहतर तरीके से सूचित कर सकता है कि उन्हें वास्तव में कैसे व्यवहार करने की आवश्यकता है।
प्रकार वे हैं जो प्रोग्राम गणित से संबंधित हैं, शाब्दिक रूप से, इसलिए वास्तव में ऊपरी तौर पर इस बात पर कोई बाध्यता नहीं है कि वे कितने जटिल हो सकते हैं, या एक बिंदु जहां आप उनके बारे में सीख सकते हैं। वस्तुतः उच्च स्तर के विश्वविद्यालय के पाठ्यक्रमों के बाहर के सभी संसाधन सभी किसी विशेष भाषा में कैसे काम करते हैं, इसलिए आपको यह भी तय करना होगा।
जैसा कि सबसे अच्छा मैं पेशकश कर सकता हूं, प्रकारों को स्तरीकृत किया जा सकता है जैसे:
- बहुत कमजोर प्रकार से, जावास्क्रिप्ट जैसी चीजें जहां [] + {} को परिभाषित किया गया है
- चुपके से पाइथन की तरह टाइप किया जाता है, जहाँ आप [] + {} नहीं कर सकते, लेकिन जब तक आप कोशिश नहीं करते, तब तक जाँच नहीं की जाती है
- कमजोर सी या जावा की तरह टाइप किया जाता है, जहां आप [] + {} नहीं कर सकते हैं, लेकिन यह संकलन समय पर जांचा जाता है, हालांकि आपके पास अधिक उन्नत प्रकार की सुविधाएँ नहीं हैं
- सी + + टेम्पलेट मेटाप्रोग्रामिंग, और सरल हास्केल कोड जैसे कमजोर और जोरदार टाइप के बीच की सीमा को स्ट्रैडलिंग करना जहां केवल प्रॉपर्टीज लागू होती हैं।
- पूरी तरह से मजबूत टाइप में, और अधिक जटिल हास्केल कार्यक्रमों की तरह जहां चीजें करते हैं, जैसा कि ऊपर दिखाया गया है
- बहुत दृढ़ता से टाइप किया गया, जैसे अगड़ा या इदरीस, जहां प्रकार और मूल्य आपस में बातचीत करते हैं और एक-दूसरे को विवश कर सकते हैं। यह उतना ही मजबूत है जितना कि टाइप सिस्टम मिलते हैं, और उनमें प्रोग्रामिंग वही होती है जो आपके प्रोग्राम के बारे में गणितीय प्रमाण लिखते हैं। नोट: अगाडा में कोडिंग यह शाब्दिक रूप से गणितीय प्रमाण नहीं लिख रहा है, प्रकार गणितीय सिद्धांत हैं, और उन प्रकारों के साथ कार्य रचनात्मक उदाहरण हैं जो उन सिद्धांतों को साबित करते हैं।
आम तौर पर, आप इस सूची में और नीचे जाते हैं, जो आपके लिए और अधिक कर सकते हैं, लेकिन बहुत नीचे तक, आप समताप मंडल में चढ़ रहे हैं और हवा थोड़ी पतली हो रही है - पैकेज पारिस्थितिकी तंत्र बहुत छोटा है और आप ' अपने आप को अधिक चीजें लिखना होगा बनाम एक प्रासंगिक पुस्तकालय मिला है। प्रवेश करने की बाधा भी अधिक हो जाती है क्योंकि आप नीचे जाते हैं, क्योंकि आपको वास्तव में बड़े पैमाने पर प्रोग्राम लिखने के लिए पर्याप्त प्रकार के सिस्टम को समझना होगा।