জাভা জুড়ে স্কেলা কেন ব্যবহার করুন


16

ভাষা হিসাবে আমি পুরোপুরি স্কালায় আছি ... এবং এখনও কোনও সংস্থার জাভা থেকে স্কালায় যেতে হবে কেন তা নিয়ে আমি লড়াই করছি। স্কালা কি কেবল জেভিএমের শীর্ষে সিনট্যাটিক চিনির সাথে রয়েছে বা জাভা জুড়ে স্কালায় এমন মৌলিক উন্নতি রয়েছে যা বাস্তব বিশ্বের অ্যাপ্লিকেশনগুলিকে উন্নত করতে পারে?


4
এটি কোথাও একটি নকল পেয়েছে

2
মনে হচ্ছে আপনি এটি (স্কেলা) অনেক ব্যবহার করেছেন (ভাল, আমার চেয়ে বেশি) - আপনার ব্যক্তিগত অভিজ্ঞতাতে আপনি কী খুঁজে পেয়েছেন?
হতাশ

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

1
@delnan, তাই অন্তত: stackoverflow.com/questions/6073517/... । @ ডাকোটা নর্থ, এসই সাইটের মধ্যে পোস্টটি অতিক্রম করবেন না - আপনার প্রশ্নের উপযুক্ত উপযুক্ত ফোরামটি বেছে নিন এবং কেবল সেখানে পোস্ট করুন। অন্য সাইটগুলিতে, আপনার পোস্ট যেভাবেই বন্ধ হয়ে যাবে, ঠিক যেমনটি এসও তে এইটির সাথে ঘটেছিল।
পিটার তারেক

1
এখানে আরও একটি, দুর্দান্ত উত্তর সহ এসও-তে প্রায় হুবহু নকল: স্ট্যাকওভারফ্লো.com
পিটার তারেক

উত্তর:


19

দাবি অস্বীকার: আমি স্কাল গুরু নই।

স্কালা দুটি জিনিস অত্যন্ত ভালভাবে কাজ করে যা জাভা (বর্তমানে) না করে।

কার্যকরী সমস্যাগুলি সমাধান করুন

  • সর্বাধিক প্রাথমিক স্তরে, স্কালা সংগ্রহের সমর্থন সহ পুরোপুরি বন্ধের সজ্জিত করেছে। এর অর্থ আপনাকে আর বয়লার প্লেট কোড লিখতে হবে না (নির্লজ্জভাবে একটি ডি জোন পোস্ট ছিড়ে)

    public List<Item> bought(User user)
    {
        List<Item> result = new ArrayList();
        for (Item item : currentItems)
        {
            if (user.bought(item))
            {
                result.add(item);
            }
        }
        return result;
    }

তবে পরিবর্তে কিছু লিখুন:

def bought(user: User) = items.filter(user bought _)
  • আরও কার্যকরী প্রেম আছে, তবে আমি বর্তমানে কার্যকরী প্রোগ্রামিংয়ে স্তন্যপান করার কারণে আমি এ বিষয়ে কথা বলার যোগ্য নই :)

একটি নিরাপদে উপায়ে সমাধান করুন

  • স্কালার একটি অভিনেতার মডেল রয়েছে (+ কিছু অন্যান্য ধার্মিকতা) যা জাভাটির পারস্পরিক ডেটা + থ্রেড মডেলের লকগুলির চেয়ে উত্তরাধিকারী সুরক্ষিত (ল্যাবগুলি যত ভালই পাচ্ছে না, জাভা এখনও ভাষার দ্বারা বাধাগ্রস্ত হয়)।

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

একটু এইচটিএইচ


3
আমি উল্লেখ করতে চাই যে আক্কা (অভিনেতার মডেল) স্কালা এবং জাভা উভয়ের জন্য উপলব্ধ। আক্কা.ইও
জর্জিও

5
আমি স্কালা পছন্দ করি এবং আমি জাভা থেকে এটিতে মাইগ্রেশন করছি। তবুও জাভা এবং স্কালার তুলনা করার সময় এটি আমাকে ছাড়িয়ে যায় এবং স্কালার বিকাশকারীরা যথাসম্ভব ভার্বোজ এবং মাল্টি লাইন জাভা কোড লেখার চেষ্টা করে এবং স্কালা ওয়ান লাইনারের সাথে এটি প্রতিস্থাপনের জন্য খুব চেষ্টা করে। জাভা কোডের উপরে পঠনযোগ্যতার ক্ষতি ছাড়াই 12
ম্যাটট

2
"প্রচুর ছোট লাভ এবং উন্নতি হ্যাঁ, তবে নিজেকে ঝুলানোর জন্য আরও অনেক দড়ি" " +1
রব

@ লিউসেক বিশেষত যেহেতু স্নিপেট জাভাটির পরিবর্তে সি এর কোঁকড়া ধনুর্বন্ধনী কনভেনশন ব্যবহার করে: পি
অ্যান্ড্রেস এফ।

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

9

এটি আপনার "কেবল সিনট্যাকটিক চিনির" সংজ্ঞা নির্ভর করে উদাহরণস্বরূপ, কোন উপায়ে জাভা মেশিন কোডের চেয়ে কেবল সিনট্যাকটিক চিনির চেয়ে বেশি?

যে কোনও ভাষা করতে পারে মেশিন কোডের চেয়ে কম তবে কোনও ভাষাই বেশি কিছু করতে পারে না।

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

তবে কেবল অন্য দুটি বিবেচনার জন্য, জাভা জুড়ে এখনও স্কালার সুবিধা রয়েছে।

বিন্দুটি বেলবোর করার মতো নয়, তবে ক্লোজারগুলি কোডার্স ক্লোজার না হওয়ার চেয়ে আরও বেশি কম্পোজেবল করে তোলে। এবং জাভা 7 কিছু যোগ করবে নামক ক্লোজার , সেগুলি তা হবে না - এগুলি কেবল বেনামে ফাংশন হবে।

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


4
আসলে জাভা'র '
ক্লোজারগুলি

1
@ মার্তিজন সংশোধনের জন্য ধন্যবাদ। এই মুহুর্তে, আমি আসলে আর যত্ন করি না।
ড্যানিয়েল সি সোব্রাল

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

@ মার্তিজান ভার্বার্গ: জাভাতে ইতিমধ্যে এক ধরণের বন্ধ রয়েছে (বেনামে অভ্যন্তরীণ শ্রেণীর আকারে)। এতে যে অভাব রয়েছে তা হ'ল বেনাম ফাংশন (যা হ'ল বিশেষ পদ্ধতি এবং কিছু বিশেষ বাক্য গঠন সহ বিশেষ বেনাম শ্রেণি হিসাবে বিবেচনা করা যেতে পারে)।
জর্জিও

@ জর্জিও - সত্য, তবে আসন্ন ইনভয়েডিনামিক ভিত্তিক প্রয়োগের তুলনায় অ্যানোন অভ্যন্তর শ্রেণিটি খারাপভাবে পারফর্ম করছে এবং এটি বেশ ভাল, সোর্স কোড
কুরুচিপূর্ণ

2

উপরে Martijn এর উত্তর আমি যোগ করতে যে Scala বেশি চাই ভাবপূর্ণ জাভা চেয়ে এবং বেনিফিট যে (1) আপনার আরো উত্পাদনশীল তোলে হয় (2) একই সমস্যা মানে সমাধানে যাতে আপনি সম্ভবত বাগ কমাতে পারে জন্য কম কোড লেখা আপনার কোড (আইএমএইচও বাগ-মুক্ত কোডটি একটি পৌরাণিক কাহিনী)।


0

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

<T> CollectionUtils.filter(Predicate<T>...)

বা ক্লোসারের মতো ব্যবহার করুন

<T> CollectionUtils.forAllDo(..., Closure<T>)

তবে অবশ্যই আরও ভার্বোজ। যদিও টাইপ অনুমানটি পছন্দ করি। আপনি স্কেল শিখার সাথে সাথে আপনি বুঝতে পারবেন যে সম্ভবত এটি হুডের নীচে যা চলছে। আমার মতে, প্রতিটি ভাষা + Ve এবং -ve সহ আসে।


-3

বোধগম্যতা জন্য তালিকা।

জাভাতে উদাহরণস্বরূপ:

int myVar;
if (condition) {
  myVar = //some value
}
else {
 myVar = //some other value
}

স্কালায়, একই কোডটি অনেক বেশি মার্জিতভাবে লিখিত হয় (পাইথনের মতো):

int myVar = (//some value) if (condition) else // other value;

এবং সম্পন্ন।

স্ক্যালার এমন অনেক কিছুই রয়েছে যা জাভা দেয় না। সহজভাবে কোনও তুলনা হয় না। একমাত্র সমস্যা হ'ল লোকেরা জাভা (বি / সি সিএস ক্লাসে এটাই শেখায়) এর সাথে বেশি পরিচিত এবং স্কালা দৃষ্টান্তের সাথে এখনও দক্ষ নয়।

স্কালায় লেজ পুনরাবৃত্তি রয়েছে, এটি টিপলগুলি ফিরিয়ে দিতে পারে (জাভা 8-এ আসতে পারে এমন কিছু মনে করি)।

এটা কোন তুলনা। স্কালাটি মার্টিন অর্ডারস্কি দ্বারা বিকাশ করা হয়েছিল, যিনি জাভা জেনারিকসের জন্য মূল দলে কাজ করেছিলেন।

স্কেলা কেবলমাত্র অনেক উচ্চতর ভাষা। এখানেই শেষ এটা পেতে ওখানে যাও. যে লোকেরা অন্যথায় বলে তারা কেবল স্ক্যালাকে আরও ভালভাবে আবিষ্কার করতে পারে নি।

উপরে, আমি টেল রিকার্সন অপটিমাইজেশন বলতে চাইছিলাম (যা জেভিএম স্কালার সংকলক যেভাবে করতে পারে তা করতে পারে না)।

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

টমক্যাট একটি জিনিস না করতে পারে, এটি হ'ল অ্যাসিঙ্ক্রোনাস অপারেশনগুলির জন্য যেগুলি অবরুদ্ধকরণ নয় I / O non এর জন্য, জাভা বিকাশকারীরা সাধারণত একটি বার্তা সারিটি ব্যবহার করে একটি কার্যকরী উদ্ভাবন করেছে (কাতারে বার্তাটি প্রেরণ করুন, এবং অন্য কোনও প্রক্রিয়া বা থ্রেড এটি তুলে নিয়েছে এবং আপনি যা পটভূমিতে চান তা করেন)।

দুর্ভাগ্যক্রমে, এই পদ্ধতিটি cr * p, এবং টমক্যাটে জাভা সার্লেটলেট স্থাপনের সীমাবদ্ধতার উপর একটি হ্যাক।

আক্কা + স্প্রে পরীক্ষা করে দেখুন। এটি স্কালার অভিনেতা ব্যবহার করে (অভিনেতা কেবল থ্রেডসের মতোই, কেবলমাত্র বার্তাগুলির মাধ্যমেই তারা যোগাযোগ করতে পারে) communicate

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

আপনি যদি এখনও জাভা ব্যবহার করে থাকেন এবং এটি স্কেলার চেয়ে ভাল বলে মনে করেন তবে আপনি টাইপ করার জন্য আপনার কম্পিউটার ব্যবহার বন্ধ করতে পারেন এবং কুইল কলম এবং মোমবাতির আলোতে লেখার দিনগুলিতে ফিরে যেতে পারেন। জাভা মূলত স্কালার সাথে তুলনা করে অ্যানটেডিলুভিয়ান।


4
এটি কোনও তালিকা বোঝার উদাহরণ নয়। এবং জাভাতে আপনি লিখেছেন:int myVar = condition ? someValue : otherValue
কেভিন cline

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