এখানে কি সুপরিচিত পাওয়ারশেল কোডিং কনভেনশন রয়েছে?


18

পাওয়ারশেলের প্রোগ্রামিংয়ের সময় কি কোনও সংজ্ঞায়িত কনভেনশন রয়েছে?

উদাহরণস্বরূপ, স্ক্রিপ্টগুলিতে যা দীর্ঘমেয়াদী বজায় রাখা হয়, আমাদের কী দরকার:

  • আসল সেমিডলেট নাম বা উপনামটি ব্যবহার করবেন?
  • সেমিডলেট পরামিতিটির নাম সম্পূর্ণ বা কেবলমাত্র আংশিকভাবে ( dir -Recurseবনাম dir -r) নির্দিষ্ট করুন
  • সেমিডলেটগুলির জন্য স্ট্রিং আর্গুমেন্টগুলি নির্দিষ্ট করার সময় আপনি এগুলি উদ্ধৃতিতে আবদ্ধ করেন ( New-Object 'System.Int32'বনাম)New-Object System.Int32
  • ফাংশন এবং ফিল্টার লেখার সময় আপনি কি পরামিতির প্রকারগুলি নির্দিষ্ট করেন?
  • আপনি (অফিসিয়াল) সঠিক ক্ষেত্রে সেমিডলেট লিখছেন?
  • কীওয়ার্ডগুলির জন্য BEGIN...PROCESS...ENDআপনি সেগুলি কেবল বড় হাতের অক্ষরেই লিখেন?

দেখে মনে হচ্ছে এমএসডিএন এর পাওয়ারশেলের জন্য কোডিং কনভেনশন ডকুমেন্টের অভাব রয়েছে, যেমন সি # এর জন্য যেমন নথি উপস্থিত রয়েছে।




2
একটি সম্প্রদায় প্রকল্প রয়েছে যা এই জাতীয় সম্মেলনের নথিভুক্ত করার চেষ্টা করছে। github.com/PoshCode/ পাওয়ারশেল অনুশীলনএন্ড স্টাইল । অবশ্যই বৈকল্পিক আছে, শৈলী একটি খুব ব্যক্তিগত জিনিস।
ক্রিস ডেন্ট

উত্তর:


8

@ রবার্ট হার্ভে কিছু ভাল আনুষ্ঠানিক লিঙ্ক উল্লেখ করেছেন। কম আনুষ্ঠানিক নথির মাধ্যমে, আমার চিন্তাভাবনাগুলি হ'ল:

আসল সেমিডলেট নাম বা উপনামটি ব্যবহার করবেন?

পুরো নামটির চেয়ে আরও পরিষ্কার হয়ে থাকলে কেবলমাত্র উপনামটি ব্যবহার করুন। উদাহরণস্বরূপ, আমি মনে করি পূর্ববর্তী অভিজ্ঞতার ভিত্তিতে বেশিরভাগ লোক স্ক্রিপ্টে সন্ধান করতে dirবা lsআরও স্পষ্ট দেখতে পাবে Get-ChildItem(উদাহরণস্বরূপ, যে কেউ পাওয়ারশেল স্ক্রিপ্ট লিখছেন তার মধ্যে ডস ব্যাচের স্ক্রিপ্ট বা ইউনিক্স স্ক্রিপ্টে দু'বারের মধ্যে একটি রয়েছে)।

সেমিডলেট পরামিতিটির নাম পুরো বা কেবলমাত্র আংশিকভাবে নির্দিষ্ট করুন (দির-রেকর্ড বনাম দির-আর)

একটি স্ক্রিপ্টে, আমি পুরোপুরিভাবে নামটি বানান করব কারণ (উপরের উদাহরণের মতো নয়) আমি এমন কোনও সময় ভাবতে পারি না যেখানে সংক্ষিপ্ত সুইচটি বানানের চেয়ে আরও স্পষ্ট হবে। সংক্ষিপ্ত সুইচ নাম টাইপিং সংরক্ষণ করুন। একটি কমান্ড লাইনে, এটি আবশ্যক। একটি স্ক্রিপ্টে, অতিরিক্ত কীস্ট্রোকগুলি পঠনযোগ্যতা এবং রক্ষণাবেক্ষণের জন্য এটি উপযুক্ত।

সেমিডলেটগুলির জন্য স্ট্রিং আর্গুমেন্টগুলি নির্দিষ্ট করার সময় আপনি এগুলি উদ্ধৃতিতে আবদ্ধ করবেন (নিউ-অবজেক্ট 'সিস্টেম.আইটি 32' বনাম নিউ-অবজেক্ট সিস্টেম I ইন্ট 32

কোডটি পড়ার সময় কোটগুলিতে স্ট্রিং আর্গুমেন্টগুলি বদ্ধ করা আরও স্পষ্ট মনে হয়, তাই আমি সেগুলি অন্তর্ভুক্ত করব।

ফাংশন এবং ফিল্টার লেখার সময় আপনি কি পরামিতির প্রকারগুলি নির্দিষ্ট করেন?

দোভাষীর (যেটি ঘটে) দ্ব্যর্থহীনতার সমাধান করার জন্য যখন এটি করার প্রয়োজন হয় কেবল তখনই। যদি আপনি চেষ্টা করে যাচ্ছেন এবং সবকিছুতে টাইপ করতে চান, আপনি পাশাপাশি গিয়ে সি # কমান্ড লাইন অ্যাপ্লিকেশনগুলি লিখতে পারেন (যা সবসময় খারাপ জিনিস হয় না তবে এটি স্ক্রিপ্টিংয়ের মাধ্যমে প্রাপ্ত সময় সাশ্রয়কে অবহেলা করে)।

আপনি (অফিসিয়াল) সঠিক ক্ষেত্রে সেমিডলেট লিখছেন?

আপনার উচিত । আমি সাধারণত করি। তাড়াহুড়া করার সময় আমি সিনেমায় কিছুটা শিথিল হিসাবে পরিচিত যেহেতু এটি সিন্ট্যাক্টিকভাবে গুরুত্ব দেয় না।

বিগইন ... প্রসেস ... শেষের মতো কীওয়ার্ডগুলির জন্য আপনি কি কেবল সেগুলি বড়হাতে লিখবেন?

না, এটি ফরট্রান নয়। আমি মনে করি বেশিরভাগ মানুষ এর চেয়ে বেশি পড়তে beginবা Beginবেশি পাঠযোগ্য BEGIN। অনলাইনে চিৎকার করা এবং প্রোগ্রামের সর্বাধিক জাগতিক অংশের চিৎকারের সাথে আমরা সমস্ত ক্যাপগুলি যুক্ত করার একটি কারণ রয়েছে যা সবচেয়ে গুরুত্বপূর্ণ বিষয়গুলির দিকে মনোযোগ আকর্ষণ করে পাঠযোগ্যতা রোধ করে।

গাইডিং অধ্যক্ষের পাঠযোগ্যতা হওয়া উচিত। স্ক্রিপ্টগুলি তাদের স্বভাব অনুসারে দ্রুত এবং নোংরা প্রোগ্রাম হিসাবে, কেবল লেখার কোডের দিকে ve আপনি এবং আপনার দলটি ছয় মাসের মধ্যে স্ক্রিপ্টটি এখনও বুঝতে পারে তা নিশ্চিত করার জন্য আপনার প্রতিটি সিদ্ধান্ত নেওয়া উচিত। আপনার কোডটি দেখার সময় নিজেকে আপনার নিজের জুতা থেকে বের করে নেওয়ার চেষ্টা করুন এবং এই প্রশ্নটি জিজ্ঞাসা করুন: "আমি যদি এক সপ্তাহ আগে এই কাজটি শুরু করেছিলাম (এবং সত্যই সাধারণ সংস্কৃতিতে অন্তর্ভুক্ত ছিল না) তবে কীভাবে এটি আলোকিত লেখা হয়েছিল তা আমি খুঁজে পেতে পারি? নাকি বিভ্রান্তিকর? "


2

মাইক্রোসফ্ট সিএমডলেট ডেভলপমেন্ট গাইডলাইনসের একটি খুব ভাল সেট লিখে এবং প্রকাশ করেছে

উদ্ধৃতাংশ:

এই বিভাগের বিষয়গুলি বিকাশ নির্দেশিকা সরবরাহ করে যা আপনি সুগঠিত সেমিডলেটগুলি তৈরি করতে ব্যবহার করতে পারেন। উইন্ডোজ পাওয়ারশেল রানটাইম দ্বারা সরবরাহিত সাধারণ কার্যকারিতাটি কাজে লাগিয়ে এবং এই নির্দেশিকাগুলি অনুসরণ করে, আপনি ন্যূনতম প্রচেষ্টা সহ শক্তিশালী সেমিডলেটগুলি বিকাশ করতে পারেন এবং ব্যবহারকারীকে একটি ধারাবাহিক অভিজ্ঞতা প্রদান করতে পারেন। অতিরিক্তভাবে, আপনি পরীক্ষার বোঝা হ্রাস করবেন কারণ সাধারণ কার্যকারিতাটির জন্য পুনরায় পরীক্ষা করার প্রয়োজন হয় না।

এই গ্রুপ এ

এই নির্দেশিকাগুলি কোনও ভাষার মধ্যে সীমাবদ্ধ নয় (তারা কোনও ভাষার উল্লেখ করে না), এবং পাওয়ারশেলের Cmdlet লেখার সময় পুরোপুরি প্রযোজ্য।

এই নির্দেশিকা ব্যবহার করে আপনাকে পরিষ্কার, আবিষ্কারযোগ্য, ব্যবহারযোগ্য এবং পুনরায় ব্যবহারযোগ্য সিএমডলেট লিখতে সহায়তা করবে। এই নির্দেশিকাগুলি অনুসরণ করে বেশ কয়েকটি পাওয়ারশেল মডিউল তৈরি করার পরে আমি খুঁজে পাওয়া শক্ত নয় এবং আমাকে আরও ভাল পাওয়ারশেল বিকাশকারী হতে সাহায্য করেছে। সেইসাথে সাধারণ স্ক্রিপ্টগুলি লেখার সময় সেই দক্ষতা সরাসরি ব্যবহারযোগ্য।


1
এগুলি পাওয়ারশেল কীভাবে লিখতে হবে তার চেয়ে কীভাবে সেমিডলেট লিখতে হবে তার সম্পর্কে আরও বেশি মনে হয়।
ফিলিপ কেন্ডল

@ ফিলিপ কেন্ডল তারা সত্যিই করে। এটি সম্পূর্ণ প্রশ্নের উত্তর নাও দিতে পারে, তবে আমি বিশ্বাস করি এটির ফলে প্রশ্নের মান আরও বেড়ে যায়। মনে রাখবেন যে আপনি নিজের সিএমডলেটগুলি খাঁটি পাওয়ারশেলে নিখুঁতভাবে লিখতে পারেন এবং এই নির্দেশিকাগুলি সত্যই এটির সাথেও সহায়তা করে। আপনি যদি পাওয়ারশেলের একটি ভাল সিএমডলেট লিখতে পারেন তবে আপনি ভাল পাওয়ারশেল স্ক্রিপ্টগুলিও লিখতে পারেন।
oɔɯǝɹ

1

দ্বিতীয় উত্তর হিসাবে; আপনি আপনার কোডটি যাচাই করতে PSScriptAnalyzer মডিউলটি ব্যবহার করতে পারেন ।

Invoke-ScriptAnalyzer -Path .

এটি কোড বিশ্লেষণের ভিত্তিতে, একটি নিয়মসেট ব্যবহার করে। এটি কোড ডিজাইনকে বৈধতা দেবে এবং আপনাকে আপনার কোডে অনেক ছোট সমস্যা সনাক্ত করতে সহায়তা করবে।

ডিজাইন এবং মানের সমস্যাগুলি ধরার জন্য আমরা আমাদের বিল্ডগুলিতে (আমরা বিল্ডগুলি এবং মডিউলগুলির জন্য একটি ব্যক্তিগত সংগ্রহস্থল ব্যবহার করি) এটি অন্তর্ভুক্ত করেছি।

আপনি যদি আগ্রহী হন তবে এই মডিউলটিতে একটি পাওয়ারশেল কোড ফর্ম্যাটারও রয়েছে (যা একাধিক শৈলী ব্যবহার করতে পারে), যাতে আপনি কোড লেআউটটিকে মানিক করার জন্য এটি ব্যবহার করতে পারেন।


0

কিছুটা স্পর্শকাতর উত্স থাকলে @ oɔɯǝɹ এর উত্তরে থাকা দস্তাবেজগুলি ভাল।

আপনি ভিসুয়াল স্টুডিও কোড, যা বার্ধক্য PowerShell ISE প্রতিস্থাপন, এবং তারপর ইনস্টল করতে পরিকল্পনা করা হয়েছে ব্যবহার করেন তাহলে বনাম কোড PowerShell এক্সটেনশন , যে বিভিন্ন ফর্ম্যাটিং অপশন যা ছিল অন্তর্ভুক্ত আংশিকভাবে অন্তত উপর ভিত্তি করে অপ্রাতিষ্ঠানিক PowerShell সর্বোত্তম কার্যাভ্যাস এবং শৈলী গাইড । ভিএস কোড এবং পাওয়ারশেল এক্সটেনশন উভয়ই মাইক্রোসফ্ট দ্বারা পরিচালিত হয়, সুতরাং এটি প্রায় সরকারী হিসাবে আনুষ্ঠানিক নির্দেশিকা হতে পারে।

তারা যে কথা বলেছে তাতে আমি একমত নই। উদাহরণস্বরূপ, আমি পিএইচপি, জাভা, সি #, এবং এসকিউএল থেকে এসেছি যেখানে প্রয়োজন না হলে সেমিকোলনগুলি আশা করা হয়। কোডগুলি এগুলি ছাড়া আমার কাছে ভুল দেখায় , তাই আমি তাদের অন্তর্ভুক্ত করি। যদি #requires SemicolonTerminatorআমি থাকত তবে আমি আমার বেশিরভাগ স্ক্রিপ্টগুলিতে এটি সক্ষম করে ফেলতাম তাই আমাকে কোনও লাইন ভাঙার হোয়াইটস্পেস সম্পর্কে চিন্তা করতে হবে না। আমি গাড়িবহর রিটার্ন এবং অন্যান্য ভিবি-ইসেমগুলিকে পালাতে পছন্দ করি না।

এগুলির মধ্যে আমার মতামত:

আসল সেমিডলেট নাম বা উপনামটি ব্যবহার করবেন?

দ্ব্যর্থহীন হন। কোনও সংরক্ষিত স্ক্রিপ্টে কখনই কোনও নাম ব্যবহার করবেন না; এমনকি একটি ডিফল্ট নাম। কোনও ব্যবহারকারীর ডিফল্ট এলিয়াস পরিবর্তন থেকে বিরত থাকার কিছুই নেই। ধারণা করা নিরাপদ যে তারা পরিবর্তনযোগ্য নয়।

সেমিডলেট পরামিতিটির নাম পুরো বা কেবলমাত্র আংশিকভাবে নির্দিষ্ট করুন (দির-রেকর্ড বনাম দির-আর)

আবার, দ্ব্যর্থহীন হন। পূর্ণ পরামিতি নামগুলির মধ্যে সেরা ফরোয়ার্ড সামঞ্জস্য রয়েছে। -rআজকে দ্ব্যর্থহীন হতে পারে তবে নতুন পরামিতিগুলি প্রবর্তন করে কোনও কমান্ডের ভবিষ্যতের সংস্করণগুলি থামিয়ে দেওয়ার কিছুই নেই। আপনি কোনও আইডিই (আইএসই বা ভিএস কোড) ব্যবহার করছেন। হিট Ctrl+ Spaceএবং সেই প্যারামিটারটি স্বয়ংক্রিয়ভাবে পূর্ণ করুন।

মনে রাখবেন যে, ls -r হয় দ্ব্যর্থক। -ReadOnlyএর আরেকটি প্যারামিটার Get-ChildItem

সেমিডলেটগুলির জন্য স্ট্রিং আর্গুমেন্টগুলি নির্দিষ্ট করার সময় আপনি এগুলি উদ্ধৃতিতে আবদ্ধ করবেন (নিউ-অবজেক্ট 'সিস্টেম.আইটি 32' বনাম নিউ-অবজেক্ট সিস্টেম I ইন্ট 32

সাধারণভাবে, যখন প্রয়োজন হবে তখনই উদ্ধৃতিগুলি ব্যবহার করা উচিত (যেমন, New-Object -TypeName 'System.Collections.Generic.HashSet[System.Int32]'আপনি যখন পারেন তখন একক উদ্ধৃতি ব্যবহার করুন এবং যখন আপনাকে একক উদ্ধৃতি আবদ্ধ করতে হবে বা ভেরিয়েবল এম্বেড করার প্রয়োজন হবে তখন কেবল ডাবল উদ্ধৃতিগুলি ব্যবহার করুন)।

ফাংশন এবং ফিল্টার লেখার সময় আপনি কি পরামিতির প্রকারগুলি নির্দিষ্ট করেন?

আমি সাধারণত তা করি, যদি না বিশেষত একই প্যারামিটারের সাথে বিভিন্ন ধরণের বিভিন্ন ধরণের গ্রহণ করার প্রয়োজন হয় এবং পৃথক প্যারামিটার সেট লিখতে না চাই।

আপনি (অফিসিয়াল) সঠিক ক্ষেত্রে সেমিডলেট লিখছেন?

পাস্কেল কেস। হ্যাঁ.

বিগইন ... প্রসেস ... শেষের মতো কীওয়ার্ডগুলির জন্য আপনি কি কেবল সেগুলি বড়হাতে লিখবেন?

আমি বিবৃতি, অপারেটর, এবং ভাষা নির্মান দেখা করেছি Begin, If, ForEach, -NotInসেইসাথে begin, if, foreach, -notin। ব্যক্তিগতভাবে, আমি লোয়ার কেস পছন্দ করি এবং কমান্ডগুলি পাস্কাল কেস হিসাবে ছেড়ে দিই, তবে তারা উভয়ই সমান সাধারণ।

অন্যান্য:

  • সর্বদা পরামিতি নির্দিষ্ট করুন। অবস্থানগত আদেশ উপর নির্ভর করবেন না। New-Object -TypeName System.Int32ওভার New-Object System.Int32। আমি জানি না যে তাতে একমত হয়েছে কিনা, তবে, আবার এটি "দ্ব্যর্থহীন হয়ে উঠুন" এর সাধারণ ধারণাকে সমর্থন করে বলে মনে হচ্ছে।

  • যদি আমি একটি মডিউল লিখছি, আমি নির্দেশিত মান ক্রিয়াগুলি ব্যবহার করি Get-Verb। এই তালিকাটি অত্যন্ত সংকীর্ণ, তবে স্ক্রিপ্টগুলির জন্য একা একা থাকা স্ক্রিপ্টের নামগুলি যা কেবলমাত্র আমি নিজেই চালাব প্রায়শই না don't জেনেরিক ক্রিয়া তালিকার সমস্যাটি এটির দিকে ঝুঁকছে Get-ScriptForSpecificPurposeNoNotThatOneTheOtherOne.ps1। যদি আমি কোনও স্ক্রিপ্ট লিখছি যা কোনও পিডিএফ ফাইল থেকে নির্দিষ্ট পৃষ্ঠাগুলি বের করে, আমি এটি কল করছি না Get-ExtractedAccountPDFPages.ps1। আমি ফোন করছি Extract-AccountPDFPages.ps1। আমি কোনও স্ক্রিপ্টের আবিষ্কারের বিষয়ে উদ্বিগ্ন নই যা নিজেই একটি প্রোগ্রাম হিসাবে চলে এবং এটি খুব প্রকৃতির দ্বারা মডুলার হওয়ার উদ্দেশ্যে নয়।

  • আরও পাঠযোগ্য, আরও কংক্রিটযুক্ত, বা আরও রক্ষণাবেক্ষণযোগ্য হলে নিয়মগুলি ভঙ্গ করুন।


-3

কয়েক বছর ধরে ভেরিয়েবল, ফাংশন ইত্যাদির জন্য বহু-শব্দের নাম লেখার বিভিন্ন উপায় রয়েছে

PROGRAMFORSORTINGLOTSOFTHINGS পড়া শক্ত।

PROGRAM_FOR_SORTING_LOTS_OF_THINGS কিছুটা সহজ।

প্রোগ্রাম_সোফর্মিং_সাল্টিং_লট_এইচথিংগুলি এখনও সহজ।

প্রোগ্রামফর্টিংলটস অফিংস আন্ডারস্কোরটি সরিয়ে দেয় এবং পঠনযোগ্যতা বজায় রাখে। পাওয়ারশেল মোস্ট পার্টের জন্য এটি করে।


পাওয়ারশেল সাধারণত উটের আবরণের মিশ্রণ করে (যা সিনট্যাক্টিক্যালি কোনও অর্থ বোঝায় না) এবং ড্যাশগুলি। উদাহরণস্বরূপ, Get-ChildItemক্রিয়াপদ এবং বিশেষ্য মধ্যে একটি ড্যাশ সঙ্গে।
অ্যান্ড্রু বলছেন পুনর্নির্ধারণ মনিকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.