ভাল, দুর্বল বনাম শক্তিশালী টাইপিং বেশ অস্পষ্টভাবে সংজ্ঞায়িত। আরও, 'স্ট্রং টাইপিং' এর সাধারণ ব্যবহারের সবচেয়ে কাছাকাছি হ'ল এমন জিনিসগুলিকে উল্লেখ করা যা প্রকারের কাস্ট করা কঠিন করে তোলে, এটি আরও শক্তিশালী টাইপ সিস্টেমগুলি বর্ণনা করার জন্য আর কিছুই রাখে না। এটি বলার মতো যে আপনি যদি 30 টিরও কম পাউন্ড বহন করতে পারেন তবে আপনি দুর্বল, এবং যে কেউ আরও বেশি তুলতে পারে তারা একই ধরণের 'শক্তিশালী' - একটি বিভ্রান্তিকর পার্থক্য।
সুতরাং আমি সংজ্ঞাটি পছন্দ করি:
- দুর্বলভাবে টাইপ করা সিস্টেমগুলি আপনাকে নির্দিষ্ট কিছু কাজ থেকে বিরত রাখতে প্রকারগুলি ব্যবহার করে (যেমন ভুল)
- দৃ typ়ভাবে টাইপ করা সিস্টেমগুলি আপনার জন্য জিনিসগুলি করার জন্য প্রকারগুলি ব্যবহার করে
আপনার জন্য জিনিসগুলি বলতে আমি কী বোঝাতে চাইছি? ঠিক আছে, সার্ভেন্ট ফ্রেমওয়ার্কে একটি চিত্র রূপান্তর এপিআই রচনা পরীক্ষা করা যাক (হাস্কেলের মধ্যে, তবে আপনাকে অনুসরণ করার জন্য এটি সত্যই জানা দরকার নেই, আপনি দেখতে পাবেন ...)
{-# 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
এটি বলছে যে আমরা সার্ভেন্টকে সার্ভেন্ট প্যাকেজ এবং জুসিপিক্সেলস প্লাগইন সহ কিছু মডিউল চাই এবং প্রোগ্রামটির মূল প্রবেশপথটি ওয়ার্প ব্যাকএন্ড ব্যবহার করে সার্ভার হিসাবে 8001 পোর্টে 'রূপান্তর' ফাংশনটি চালানো। ভাষাটি কিছুটা উপেক্ষা করুন।
conversion :: Application
conversion = serve (Proxy :: Proxy ConversionApi) handler
এটি বলছে যে রূপান্তর ফাংশনটি এমন একটি সার্ভার যেখানে API অবশ্যই 'রূপান্তরএপি' টাইপের সাথে মেলে এবং অনুরোধগুলি ফাংশন দ্বারা পরিচালিত হয় handler
type ConversionApi
= ReqBody '[BMP, GIF, JPEG 50, PNG, TIFF, RADIANCE] DynamicImage
:> Post '[BMP, GIF, JPEG 50, PNG, TIFF, RADIANCE] DynamicImage
এটি ConvesionApi
প্রকারটি নির্দিষ্ট করে দিচ্ছে । এটি বলেছে যে আমাদের তালিকাভুক্ত '[বিএমপি, জিআইএফ, জেপিজি 50, পিএনজি, টিআইএফএফ, রেডিয়েন্স] দ্বারা নির্দিষ্ট হওয়া আগত সামগ্রীর প্রকারগুলি গ্রহণ করা উচিত এবং তাদের ডায়নামিকামেজ হিসাবে পরিচালনা করতে হবে এবং আমাদের একই ধরণের সামগ্রীতে রূপান্তরিত একটি ডায়নামিকামেজ ফিরিয়ে দেওয়া উচিত that ধরনের। কী:> এর অর্থ ঠিক তা নিয়ে চিন্তা করবেন না, আপাতত এটিকে খুশির যাদু হিসাবে ভাবেন।
সুতরাং, আমার পছন্দসই সংজ্ঞা দেওয়া, একটি দুর্বল টাইপ করা সিস্টেম এখন এই জাতীয় জিনিসগুলি নিশ্চিত করতে পারে:
- আপনি ভুল বহির্গামী সামগ্রীর ধরণটি ফেরান না
- আপনি আগত অনুরোধটিকে ভুল সামগ্রীর ধরণের হিসাবে পার্স করবেন না
- যদি আমাদের সার্ভারটি আরও জটিল হয় তবে এটি আমাদের ত্রুটিযুক্ত ইউআরআই তৈরি করা থেকে বিরত রাখতে পারে, তবে আমরা লিঙ্কগুলি ধারণ করতে কোনও HTML পৃষ্ঠাগুলি ফিরে আসছি না (এবং প্রকারটি নিশ্চিত করে যে আমরা পারব না!)
- সত্যিই উচ্চাকাঙ্ক্ষী দুর্বল টাইপিং সিস্টেমটি এমনকি নিশ্চিত হওয়া যায় যে আমরা আগত এবং বহির্গামী সমস্ত প্রকারের প্রকারকে নিরবচ্ছিন্নভাবে পরিচালনা করছি, যাতে টাইপটি কেবল একটি সীমাবদ্ধতার পরিবর্তে স্পেসিফিকেশন ডকুমেন্ট হিসাবে কাজ করতে পারে।
সমস্ত উচ্চতর লক্ষ্য, তবে উপরের সংজ্ঞাটি প্রদত্ত দৃ given়ভাবে টাইপ করা সিস্টেম হিসাবে যোগ্যতার পক্ষে যথেষ্ট নয়। এবং এখন আমাদের আসলে লিখিত কোডের শক্ত অংশে যেতে হবে যা এই স্পেসিফিকেশনটি অনুসরণ করে। সত্যিই শক্তিশালী টাইপ সিস্টেমে আমরা লিখি:
handler = return
এবং তারপর আমরা সম্পন্ন করেছি। এটাই, লেখার মতো আর কোনও কোড নেই । এটি একটি সম্পূর্ণ অপারেশনাল ওয়েব সার্ভার (আমার যে কোনও টাইপও মিস হয়নি) is প্রকারটি সংজ্ঞায়িত করে আমাদের ওয়েব সার্ভারটি প্রকার এবং প্যাকেজগুলি (প্রযুক্তিগতভাবে মডিউলগুলি) যা আমাদের সংজ্ঞায়িত ও আমদানি করে তা থেকে তৈরি করার জন্য যা প্রয়োজন তা সবই জানিয়েছে।
সুতরাং, কীভাবে আপনি বড় অ্যাপ্লিকেশন স্কেলে এটি করতে শিখেন? ভাল, এটি ছোট স্কেল অ্যাপ্লিকেশনগুলিতে ব্যবহার করার চেয়ে সত্যই আলাদা নয়। যে ধরণের বিলোপগুলি সেগুলি সম্পর্কিত কতগুলি কোড লিখিত তা বিবেচনা করে না।
রান টাইম টাইপ ইন্সপেকশন এমন একটি জিনিস যা আপনি সম্ভবত এড়াতে চান, কারণ এটি সুবিধার একটি বিশাল পরিমাণ ছড়িয়ে দেয় এবং প্রকারগুলিকে সহজতর করার চেয়ে ধরণের আপনার প্রকল্পকে আরও জটিল করার সুযোগ দেয়।
যেমন, এটি বেশিরভাগ ধরণের জিনিসগুলির সাথে মডেলিংয়ের অনুশীলনের বিষয়। মডেলিংয়ের দুটি প্রধান উপায় (বা সাধারণভাবে জিনিস তৈরি করা) নীচে এবং উপরে নীচে। টপ ডাউনটি সর্বোচ্চ স্তরের অপারেশনগুলির সাথে শুরু হয় এবং আপনি মডেলটি তৈরি করার সাথে সাথে আপনার এমন অংশ রয়েছে যেখানে আপনি মডেলিং পিছিয়ে রেখে চলেছেন later নীচে আপ মডেলিং মানে আপনি বেস ক্রিয়াকলাপগুলি শুরু করুন ঠিক তেমনভাবে আপনি বেস ফাংশন দিয়ে শুরু করেন, তারপরে আপনি প্রকল্পটির কার্যক্রম সম্পূর্ণরূপে ক্যাপচার না করা পর্যন্ত আরও বড় এবং বড় মডেলগুলি তৈরি করুন build নীচে আপ আরও কংক্রিট এবং সম্ভবত এটি দ্রুত তৈরি করা সম্ভব তবে নীচের স্তরগুলি আপনার নিম্ন স্তরের মডেলগুলিকে কীভাবে তাদের আচরণ করা প্রয়োজন তা আরও ভালভাবে জানাতে পারে।
প্রকারগুলি হ'ল প্রোগ্রামগুলি কীভাবে গণিতের সাথে সম্পর্কিত হয়, আক্ষরিক অর্থে, তাই তারা কীভাবে জটিল হতে পারে তার কোনও উচ্চতর আবদ্ধতা নেই, বা একটি বিন্দু যেখানে আপনি সেগুলি সম্পর্কে 'শেখানো' যেতে পারেন। কার্যত উচ্চ স্তরের বিশ্ববিদ্যালয় কোর্সের বাইরের সমস্ত সংস্থানগুলি কীভাবে কোনও নির্দিষ্ট ভাষায় টাইপগুলি কাজ করে সে সম্পর্কে উত্সর্গীকৃত, তাই আপনার এটিও সিদ্ধান্ত নেওয়া দরকার।
সর্বোপরি আমি যেভাবে অফার করতে পারি, প্রকারগুলি এর মতো স্তরযুক্ত করা যায়:
- খুব দুর্বলভাবে টাইপ করা হয়েছে, জাভাস্ক্রিপ্টের মতো জিনিস যেখানে [] + {defined সংজ্ঞায়িত করা হয়েছে
- পাইথনের মতো দুর্বলভাবে টাইপ করা হয়েছে যেখানে আপনি [] + {} করতে পারবেন না, তবে চেষ্টা না করা পর্যন্ত এটি পরীক্ষা করা হয় না
- সি বা জাবার মতো দুর্বলভাবে টাইপ করা হয়েছে, যেখানে আপনি পারবেন না [] + {}, তবে এটি সংকলনের সময় পরীক্ষা করা হয়েছে, তবে আপনার কাছে আরও উন্নত প্রকারের বৈশিষ্ট্য নেই
- দুর্বল এবং দৃ strongly়ভাবে টাইপ করা, যেমন সি ++ টেম্পলেট মেটাপোগ্র্যামিং এবং সরল হাস্কেল কোডের মধ্যে সীমানা বিস্তৃত করা যেখানে প্রকারভেদ কেবলমাত্র বৈশিষ্ট্য প্রয়োগ করে।
- উপরের চিত্রের মতো সম্পূর্ণ জটিল হ্যাস্কেল প্রোগ্রামের মতো যেখানে টাইপগুলি কাজ করে, সম্পূর্ণরূপে সম্পূর্ণ টাইপ করুন
- খুব দৃ strongly়ভাবে টাইপ করা হয়েছে, যেমন আগদা বা ইদ্রিস, যেখানে প্রকার এবং মানগুলি একে অপরকে সীমাবদ্ধ করতে পারে। এটি টাইপ সিস্টেমগুলি পাওয়ার মতোই শক্তিশালী এবং সেগুলিতে প্রোগ্রামিং আপনার প্রোগ্রামটি যা করে তা গাণিতিক প্রমাণ লেখার সমান। দ্রষ্টব্য: আগদায় কোডিং এটি আক্ষরিকভাবে গাণিতিক প্রমাণগুলি লিখছে না , প্রকারগুলি গাণিতিক তত্ত্ব এবং এই ধরণের বৈশিষ্ট্যগুলি সেই তত্ত্বগুলি প্রমাণকারী গঠনমূলক উদাহরণ।
সাধারণত, আপনি এই তালিকার আরও নীচে যান, প্রকারগুলি আপনার জন্য আরও বেশি পরিমাণে কাজ করতে পারে তবে খুব নীচে আপনি স্ট্র্যাটোস্ফিয়ারে আরোহণ করছেন এবং বায়ুটি কিছুটা পাতলা হচ্ছে - প্যাকেজ বাস্তুতন্ত্রটি অনেক ছোট এবং আপনি ' প্রাসঙ্গিক গ্রন্থাগার খুঁজে পেয়ে নিজেকে আরও কিছু লিখতে হবে। আপনি নিচে যাওয়ার সাথে সাথে প্রবেশের প্রতিবন্ধকতা আরও বেশি হয়, কারণ আপনাকে প্রকৃতপক্ষে বড় আকারের প্রোগ্রামগুলি লেখার জন্য যথেষ্ট টাইপ সিস্টেমটি বুঝতে হবে।