কোনও বন্দরে আইডিয়াম ব্যবহার করে এপিআই বনাম বজায় রাখুন


12

আমি পাইথন থেকে মরচে যাওয়ার বন্দরে কাজ করছি এবং এমন কোনও কোডে চলে এসেছি যা পাইথনের মতো রাস্টের মতো স্বাভাবিকভাবে প্রকাশ করা যায় না।

এর একটি ক্ষেত্রে ডিফল্ট পরামিতি ব্যবহার করা হচ্ছে:

class Foo:
  def __init__(self, a="Hello"):
    self._a = a

মরিচে, আপনি এটি কোনও বিল্ডার ব্যবহার করে প্রয়োগ করতে পারেন:

struct FooBuilder {
  a: &'static str,
}

struct Foo {
  _a: &'static str
}

impl FooBuilder {
  fn new() -> FooBuilder {
    FooBuilder {
      a: "Hello",
    }
  }

  fn change_a(self, new_a: &'static str) -> FooBuilder {
    FooBuilder {
      a: new_a,
      ..self
    }
  }

  fn build(self) -> Foo {
    Foo {
      _a: self.a,
    }
  }
}

পাইথনে ক্লাসটি ব্যবহার করার জন্য, এটি সহজ:

foo = Foo("Hello, World!")

তবে মরিচায় আপনাকে এমন কিছু লিখতে হবে:

let foo = FooBuilder::new().change_a("Hello, World!").build();

এটি প্রশ্নের দিকে পরিচালিত করে: কোনও বন্দরের জন্য একটি এপিআই বজায় রাখা ভাল, বা পোর্টিং ভাষার আইডিয়ামগুলি ব্যবহার করা আরও ভাল? এটি এপিআই শুরু করার জন্য কতটা সুপরিচিত তার উপর নির্ভর করে?


2
কোনও শ্রেণীর এপিআই হ'ল আপনি কীভাবে এটি ব্যবহার করবেন, কোডে এটি কীভাবে প্রকাশ করা হয় তা নয়। সুতরাং, এই অনুবাদটির একেবারে আলাদা এবং সহজভাবে গ্রহণযোগ্য নয়, এবিআই জটিল।
শে

কোথায় বলা হয়েছে যে এটি মূর্খতাপূর্ণ মরিচা?
নাদির সাম্পাওলি

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

উত্তর:


18

আপনি চান যে আপনার ধারণাগুলি তাদের হোস্ট করা ভাষায় স্পষ্টভাবে প্রকাশ করেছে expressed এর অর্থ হোস্ট ল্যাঙ্গুয়েজ আইডিয়াম ব্যবহার করা।

জনপ্রিয় আন্ডারস্কোর লাইব্রেরিটি নিন: জেএস এবং লুয়া । লুয়া বন্দর বেশিরভাগ অংশের জন্য কার্যত সমতুল্য । তবে এটি উপযুক্ত হলে বাস্তবায়নগুলি কিছুটা আলাদা। উদাহরণ স্বরূপ:

_.toArray()

হয়ে

_.to_array()

এই পরিবর্তনটি ফাংশনটির নামটি লুয়া প্রোগ্রামারদের কাছে আরও স্থানীয় মনে করে ।

তেমনি, _.এচ () জাভাস্ক্রিপ্টে কোনও অবজেক্ট, অ্যারে বা অ্যারের মতো কিছু দরকার, তবে লুয়াতে _.each () একটি পুনরুক্তিও নিতে পারে - এমন একটি প্রক্রিয়া যা জাভাস্ক্রিপ্টে উপলব্ধ ছিল না যখন আসল বুদ্ধিমান লাইব্রেরি ছিল তৈরি হয়েছিল

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

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.