আপনার মতে সবচেয়ে অবাক, অদ্ভুত, আজব বা সত্যই "ডাব্লুটিএফ" ভাষার বৈশিষ্ট্যটি আপনি কীভাবে মুখোমুখি হয়েছিলেন?
অনুগ্রহ করে প্রতি উত্তরে কেবল একটি বৈশিষ্ট্য।
আপনার মতে সবচেয়ে অবাক, অদ্ভুত, আজব বা সত্যই "ডাব্লুটিএফ" ভাষার বৈশিষ্ট্যটি আপনি কীভাবে মুখোমুখি হয়েছিলেন?
অনুগ্রহ করে প্রতি উত্তরে কেবল একটি বৈশিষ্ট্য।
উত্তর:
সি-তে, অ্যারেগুলি এভাবে সূচিযুক্ত করা যায়:
a[10]
যা খুব সাধারণ।
তবে, কম পরিচিত ফর্মটি (যা সত্যই কাজ করে!) হ'ল:
10[a]
যার অর্থ উপরের মত
জাভাস্ক্রিপ্টে:
'5' + 3 gives '53'
যেহেতু
'5' - 3 gives 2
+
স্ট্রিং সংমিশ্রনের জন্য ভয়ঙ্কর
জাভাস্ক্রিপ্টে, নিম্নলিখিত নির্মাণ
return
{
id : 1234,
title : 'Tony the Pony'
};
এর পরে নতুন লাইনে লুক্কায়িত অন্তর্নিহিত সেমিকোলন সন্নিবেশের কারণে undefined
রিটার্নগুলি একটি বাক্য গঠন ত্রুটি return
। নিম্নলিখিত হিসাবে আপনি আশা করবেন হিসাবে কাজ করে:
return {
id : 1234,
title : 'Tony the Pony'
};
আরও খারাপ, এটি এক হিসাবে কাজ করে (ক্রোমে অন্তত):
return /*
*/{
id : 1234,
title : 'Tony the Pony'
};
এখানে একই সমস্যার বৈকল্পিক যা একটি সিনট্যাক্স ত্রুটি দেয় না, কেবল নিঃশব্দে ব্যর্থ হয়:
return
2 + 2;
জাভাস্ক্রিপ্ট সত্য টেবিল:
'' == '0' // false
0 == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
false == undefined // false
false == null // false
null == undefined // true
" \t\r\n" == 0 // true
সূত্র: ডগ ক্রকফোর্ড
==
ভাষা ডিজাইনারের দৃষ্টিতে কোন উদ্দেশ্যটি কাজ করে ?
==
অর্থ ছিল ===
, এবং তারপর আরেকটা অপারেটর, মত কিছু ছিল ~=
যা অনুমোদিত জাভাস্ক্রিপ্টের এই মাতব্বরী।
সি এবং সি ++ তে ত্রিগ্রাফগুলি।
int main() {
printf("LOL??!");
}
এটি মুদ্রণ করবে LOL|
, কারণ ট্রিগ্রাফ ??!
রূপান্তরিত হয়েছে |
।
জাভাতে অটো বক্সিং এবং পূর্ণসংখ্যার ক্যাশে সহ মজা করুন:
Integer foo = 1000;
Integer bar = 1000;
foo <= bar; // true
foo >= bar; // true
foo == bar; // false
//However, if the values of foo and bar are between 127 and -128 (inclusive)
//the behaviour changes:
Integer foo = 42;
Integer bar = 42;
foo <= bar; // true
foo >= bar; // true
foo == bar; // true
জাভা উত্স কোডটিতে একটি দ্রুত উঁকি দেওয়া নীচের বিষয়গুলি আপ করবে:
/**
* Returns a <tt>Integer</tt> instance representing the specified
* <tt>int</tt> value.
* If a new <tt>Integer</tt> instance is not required, this method
* should generally be used in preference to the constructor
* {@link #Integer(int)}, as this method is likely to yield
* significantly better space and time performance by caching
* frequently requested values.
*
* @param i an <code>int</code> value.
* @return a <tt>Integer</tt> instance representing <tt>i</tt>.
* @since 1.5
*/
public static Integer valueOf(int i) {
if (i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}
দ্রষ্টব্য: কোনও সম্পত্তি দ্বারা সেট না IntegerCache.high
করা 127
পর্যন্ত ডিফল্ট ।
অটো বক্সিংয়ের সাথে যা ঘটে তা হ'ল ফু এবং বার উভয়ই একই সংখ্যক বস্তুটি ক্যাশে থেকে পুনরুদ্ধার করা ব্যতীত স্পষ্টভাবে তৈরি করা হয়: উদাহরণস্বরূপ foo = new Integer(42)
, রেফারেন্সের সমতার তুলনা করার সময় এগুলি মিথ্যা নয় বরং সত্য হবে। পূর্ণসংখ্যার মানের তুলনা করার সঠিক উপায়টি ব্যবহার করা হচ্ছে.equals;
নীল ফ্রেজারের উদ্ধৃতি (সেই পৃষ্ঠার শেষে দেখুন),
try {
return true;
} finally {
return false;
}
(জাভাতে, তবে আচরণটি সম্ভবত জাভাস্ক্রিপ্ট এবং পাইথনের ক্ষেত্রে একই রকম)। ফলাফলটি পাঠকের কাছে অনুশীলন হিসাবে ছেড়ে গেছে।
সম্পাদিত: যতক্ষণ আমরা বিষয়টিতে আছি ততক্ষণ এটিকেও বিবেচনা করুন:
try {
throw new AssertionError();
} finally {
return false;
}
Control cannot leave the body of a finally clause
return
মধ্যে finally
দফা।
এপিএল (এর সবগুলি ব্যতীত), কেবল কোনও লাইনে কোনও প্রোগ্রাম লেখার ক্ষমতা।
যেমন এপিএলে একটি লাইনে কনওয়ের গেম অফ লাইফ :
Alt পাঠ্য http://catpad.net/michael/APLLife.gif
যদি সেই লাইনটি ডাব্লুটিএফ না হয়, তবে কিছুই নেই!
এবং এখানে একটি ভিডিও
অদ্ভুত জিনিস সি ++ টেম্পলেটগুলির জন্য ব্যবহার করা যেতে পারে, "মাল্টি-ডাইমেনশনাল অ্যানালগ লিটারালস" দ্বারা সেরা প্রদর্শিত হয় যা "টানা" আকারগুলির ক্ষেত্রের গণনা করতে টেমপ্লেটগুলি ব্যবহার করে। নিম্নলিখিত কোডটি একটি 3x3 আয়তক্ষেত্রের জন্য বৈধ সি ++
#include"analogliterals.hpp"
using namespace analog_literals::symbols;
unsigned int c = ( o-----o
| !
! !
! !
o-----o ).area;
অথবা, 3D কিউব সহ অন্য একটি উদাহরণ:
assert( ( o-------------o
|L \
| L \
| L \
| o-------------o
| ! !
! ! !
o | !
L | !
L | !
L| !
o-------------o ).volume == ( o-------------o
| !
! !
! !
o-------------o ).area * int(I-------------I) );
পার্লের অনেক বিল্ট-ইন ভেরিয়েবল:
$#
- একটি মন্তব্য না !$0
, $$
এবং $?
- ঠিক একই নামের শেল ভেরিয়েবলগুলির মতো$ˋ
, $&
এবং $'
- অদ্ভুত মিলের ভেরিয়েবলগুলি$"
এবং $,
- তালিকা- এবং আউটপুট-ক্ষেত্র-বিভাজকগুলির জন্য অদ্ভুত পরিবর্তনীয়$!
- errno
যেমন একটি সংখ্যা strerror(errno)
হিসাবে কিন্তু একটি স্ট্রিং হিসাবে$_
- চৌর্য পরিবর্তনশীল, সবসময় ব্যবহার করা হয় এবং দেখা যায় না$#_
- সর্বশেষ সাব্রোটিন যুক্তির সূচক সংখ্যা ... হতে পারে@_
- বর্তমান ফাংশনের (অ) নামগুলি ... হতে পারে$@
- সর্বশেষ উত্থাপিত ব্যতিক্রম%::
- প্রতীক টেবিল$:
, $^
, $~
, $-
, এবং $=
- আউটপুট বিন্যাসের কি কিছু$.
এবং $%
- ইনপুট লাইন নম্বর, আউটপুট পৃষ্ঠা নম্বর$/
এবং $\
- ইনপুট এবং আউটপুট রেকর্ড বিভাজক$|
- আউটপুট বাফারিং নিয়ামক$[
- আপনার অ্যারে বেস 0-ভিত্তিক থেকে 1-ভিত্তিতে 42-ভিত্তিতে পরিবর্তন করুন: WHEEE!$}
- মোটেও কিছুই না, অদ্ভুতভাবে যথেষ্ট!$<
, $>
, $(
, $)
- বাস্তব এবং কার্যকর UIDs এবং GIDs@ISA
- বর্তমান প্যাকেজের সরাসরি সুপারক্লাসগুলির নাম$^T
- স্ক্রিপ্ট শুরুর সময়টি যুগের সেকেন্ডে$^O
- বর্তমান অপারেটিং সিস্টেমের নাম$^V
- পার্লের এটি কী সংস্করণসেগুলি এসেছে এমন আরও অনেক কিছুই রয়েছে। সম্পূর্ণ তালিকা এখানে পড়ুন ।
$[
পরিবর্তনশীল তাদের সব সবচেয়ে মন্দ।
perldoc perlvar
প্রতি পাঁচ সেকেন্ডের জন্য পরীক্ষা না করেই কোড করতে পারি এমন কিছু হত তবে তা অবশ্যই প্রশংসা করবে । (যদিও আমি স্বীকার করি যে অর্ধেক সময় আমি এটি ভেবে দেখেছি "আমি জানি যে একটি বিশেষ পরিবর্তনশীল রয়েছে যা আমার পক্ষে এটি করতে পারে, তবে আমি কেবল
use English;
হ'ল এটি RegExp কার্যকারিতাকে প্রভাবিত করে। আমি এটা করছি না। perldoc.perl.org/English.html#PERFORMANCE
/$foo[bar]/
, [bar]
অংশটি একটি অক্ষরের শ্রেণি বা অ্যারের সাবস্ক্রিপ্ট @foo
? ভয়ঙ্কর উত্তরের জন্য গ্রেড পারলডাটা।
স্ট্রিংগুলিতে পিএইচপি'র সংখ্যাসূচক মান হ্যান্ডলিং । সম্পূর্ণ বিবরণের জন্য আলাদা প্রশ্নের এই পূর্ববর্তী উত্তরটি দেখুন তবে সংক্ষেপে:
"01a4" != "001a4"
আপনার যদি দুটি স্ট্রিং থাকে যা বিভিন্ন সংখ্যক অক্ষর ধারণ করে, সেগুলি সমান হিসাবে বিবেচনা করা যাবে না। শীর্ষস্থানীয় শূন্যগুলি গুরুত্বপূর্ণ কারণ এগুলি স্ট্রিং সংখ্যা নয়।
"01e4" == "001e4"
পিএইচপি স্ট্রিং পছন্দ করে না। এটি কোনও অজুহাত খুঁজছে এটি আপনার মানগুলিকে সংখ্যা হিসাবে বিবেচনা করতে পারে। এই স্ট্রিংগুলিতে সামান্য হেক্সাডেসিমাল অক্ষরগুলি পরিবর্তন করুন এবং হঠাৎ পিএইচপি সিদ্ধান্ত নেয় যে এগুলি আর কোনও স্ট্রিং নয়, এগুলি বৈজ্ঞানিক স্বরলিপিতে নম্বর (পিএইচপি আপনি যে উদ্ধৃতি ব্যবহার করেছেন সেদিকে খেয়াল রাখে না) এবং এগুলি সমতুল্য কারণ নেতৃস্থানীয় শূন্যগুলি সংখ্যার জন্য উপেক্ষা করা হয়। এই পয়েন্টটিকে শক্তিশালী করার জন্য আপনি দেখতে পাবেন যে পিএইচপি এছাড়াও "01e4" == "10000"
সত্য হিসাবে মূল্যায়ন করে কারণ এগুলি সমমানের মান সহ সংখ্যা। এটি নথিভুক্ত আচরণ, এটি কেবল খুব বুদ্ধিমান নয়।
আসুন সমস্ত ভাষার জন্য ভোট দিন (যেমন পিএল / আই) যা সংরক্ষিত শব্দ দিয়ে দূরে সরিয়ে দেওয়ার চেষ্টা করেছিল।
আপনি অন্য কোথাও আইনীভাবে এই ধরনের মজাদার মত প্রকাশ করতে পারেন:
IF IF THEN THEN = ELSE ELSE ELSE = THEN
( IF
, THEN
, ELSE
পরিবর্তনশীল নাম)
অথবা
IF IF THEN THEN ELSE ELSE
( IF
একটি পরিবর্তনশীল, THEN
এবং ELSE
subroutines হয়)
জাভাস্ক্রিপ্ট অষ্টাল রূপান্তর 'বৈশিষ্ট্য' সম্পর্কে জানার জন্য ভাল:
parseInt('06') // 6
parseInt('07') // 7
parseInt('08') // 0
parseInt('09') // 0
parseInt('10') // 10
আরও বিশদ এখানে ।
সি-তে একটি স্যুইচ স্টেটমেন্টের সাহায্যে একটি ডো / ইন্টারলেস করতে পারে। এই পদ্ধতিটি ব্যবহার করে একটি মেমকিটির উদাহরণ এখানে:
void duff_memcpy( char* to, char* from, size_t count ) {
size_t n = (count+7)/8;
switch( count%8 ) {
case 0: do{ *to++ = *from++;
case 7: *to++ = *from++;
case 6: *to++ = *from++;
case 5: *to++ = *from++;
case 4: *to++ = *from++;
case 3: *to++ = *from++;
case 2: *to++ = *from++;
case 1: *to++ = *from++;
}while(--n>0);
}
}
while
শেষে একটি (শর্তাধীন) JMP
ফিরে আসে do
, যা ব্যাখ্যা করে যে আপনি কেন এড়িয়ে যেতে পারেন do
এবং এখনও লুপটিতে থাকতে পারেন।
নাম দিয়ে অ্যালগল পাস (সি সিনট্যাক্স ব্যবহার করে চিত্রিত):
int a[3] = { 1, 2, 3 };
int i = 1;
void f(int j)
{
int k;
k = j; // k = 2
i = 0;
k = j; // k = 1 (!?!)
}
int main()
{
f(a[i]);
}
def f(j : => int)
)
... template<typename T> struct by_name { virtual operator T&() = 0; }; void f(by_name<int> j) { ... } int main() { f(struct : by_name<int> { operator int&() { return a[i]; } }); }
?
পাইথনে:
>>> x=5
>>> 1<x<10
True
>>> 1<x<3
False
ডাব্লুটিএফ নয়, একটি দরকারী বৈশিষ্ট্য।
(10 > 5 > 1) != ((10 > 5) > 1)
পাইথন-এ।
(funct_a(5)+5 > b > funct_a(5))
কেবল funct_a(5)
একবার কল করে । এটি একটি দুর্দান্ত বৈশিষ্ট্য!
funct_a
সেই উদাহরণে দু'বার ডাকা হবে। এর b > funct_a(5) > c
বিপরীতে কেবল একবার ডাকা হবে b > funct_a(5) and funct_a(5) > c
।
জাভাতে:
int[] numbers() {
return null;
}
হিসাবে লেখা যেতে পারে:
int numbers() [] {
return null;
}
const T*
এবং T const*
সমতুল্য, এটিই T* const
পয়েন্টারটিকে সংযুক্ত করে। এছাড়াও, আমি সানস ফন্টগুলি ঘৃণা করি।
numbers()[2]
একটি আইনী বিবৃতি।
ইন্টারকাল সম্ভবত অদ্ভুত ভাষার বৈশিষ্ট্যগুলির সেরা সংমিশ্রণ। আমার ব্যক্তিগত প্রিয় COMEFROM বিবৃতি যা (প্রায়) GOTO এর বিপরীত।
COMEFROM মোটামুটিভাবে GOTO এর বিপরীত যেহেতু এটি কোডের যে কোনও স্বেচ্ছাচারী বিন্দু থেকে একটি COMEFROM বিবৃতিতে মৃত্যুদন্ড কার্যকর করতে পারে। রাষ্ট্রের স্থানান্তর ঘটে এমন কোডের পয়েন্টটি সাধারণত COMEFROM এর পরামিতি হিসাবে দেওয়া হয়। নির্দিষ্ট স্থানান্তর পয়েন্টে নির্দেশের আগে বা পরে স্থানান্তর ঘটে কিনা তা ব্যবহৃত ভাষার উপর নির্ভর করে। ব্যবহৃত ভাষার উপর নির্ভর করে, একই প্রস্থান পয়েন্টটি উল্লেখ করে একাধিক COMEFROMs অবৈধ হতে পারে, অ-নিরস্তকর হতে পারে, নির্ধারিত কোনও অগ্রাধিকারে মৃত্যুদন্ড কার্যকর করতে পারে, বা থ্রেডেড ইন্টারকালে দেখা যায় এমন সমান্তরাল বা অন্যথায় সমকালীন সম্পাদনকে প্ররোচিত করে। "COMEFROM x" স্টেটমেন্টের একটি সাধারণ উদাহরণ হ'ল একটি লেবেল এক্স (যা শারীরিকভাবে এটির সাথে সম্পর্কিত COMEFROM এর নিকটে অবস্থিত প্রয়োজন হয় না) যা "ফাঁদ দরজা" হিসাবে কাজ করে। কোড এক্সিকিউশন লেবেলে পৌঁছে গেলে নিয়ন্ত্রণ COMEFROM অনুসরণ করে স্টেটমেন্টে চলে যায়। এর প্রভাবটি প্রাথমিকভাবে ডিবাগিং করা (এবং প্রোগ্রামটির নিয়ন্ত্রণ প্রবাহ বোঝা) তৈরি করা অত্যন্ত জটিল, কারণ লেবেলের কাছে এমন কোনও ইঙ্গিত পাওয়া যায় না যে নিয়ন্ত্রণটি রহস্যজনকভাবে প্রোগ্রামের অন্য একটি পয়েন্টে চলে যাবে।
PLEASE
প্রায়শই পর্যাপ্ত পরিমাণে সংশোধক ব্যবহার না করেন!
আসলে কোনও ভাষার বৈশিষ্ট্য নয়, তবে প্রয়োগের ত্রুটি: কিছু প্রাথমিক ফোর্টরান সংকলক ধ্রুবক পুল ব্যবহার করে ধ্রুবকগুলিকে বাস্তবায়ন করেছিলেন। সমস্ত পরামিতি রেফারেন্স দ্বারা পাস করা হয়েছিল। যদি আপনি কোনও ফাংশন ডাকেন, যেমন
f(1)
সংকলকটি ধ্রুবক পুলের ধ্রুবক 1 এর ঠিকানাটি ফাংশনে পাঠাত। আপনি যদি ফাংশনটিতে প্যারামিটারের জন্য একটি মান নির্ধারণ করে থাকেন তবে আপনি প্রোগ্রামটিতে বিশ্বব্যাপী মানটি (এই ক্ষেত্রে 1 এর মান) পরিবর্তন করবেন। কিছু মাথা চুলকানো কারণ।
2+2
পারেন সমান 5
(এর খুব বড় মানের জন্য 2
অবশ্যই!)।
2+2
সমান হবে )। 5
5
2 + 2 = 5
; এটি একটি সিনট্যাক্স ত্রুটি হবে। যা সত্য হবে তা হ'ল 2 + 2 .EQ. 5
।
এটি কোনও ভাষার বৈশিষ্ট্য হিসাবে বিবেচনা করা যায় কিনা তা আপনি জানেন না, তবে সি ++ তে টেমপ্লেট সম্পর্কিত প্রায় কোনও সংকলক ত্রুটি প্রতিদিনের ভিত্তিতে বিশ্বের অনেক সি ++ প্রোগ্রামারগুলিতে ন্যায্য পরিমাণ ডাব্লুটিএফ সরবরাহ করে :)
std::vector<std::pair<int, std::complex>, std::allocator<std::pair<int, std::complex> > >::vector< std::vector<std::pair<int, std::complex>, std::allocator<std::pair<int, std::complex> > >::iterator>(std::vector<std::pair<int, std::complex>, std::allocator<std::pair<int, std::complex> > >::iterator, std::vector<std::pair<int, std::complex>, std::allocator<std::pair<int, std::complex> > >::iterator, std::allocator<std::pair<int, std::complex> >)
সি এর অনেকগুলি নাম স্পেস:
typedef int i;
void foo()
{
struct i {i i;} i;
i: i.i = 3;
printf( "%i\n", i.i);
}
বা অক্ষর সহ:
typedef char c;
void foo()
{
struct c {c c;} c;
c: c.c = 'c';
printf( "%c\n", c.c);
}
আমি বলব পাইথনের পুরো হোয়াইটস্পেস জিনিসটি আমার বৃহত্তম ডাব্লুটিএফ বৈশিষ্ট্য। সত্য, আপনি কিছুটা হলেও এর সাথে অভ্যস্ত হয়ে যান এবং আধুনিক সম্পাদকরা এটি মোকাবেলা করতে সহজ করে তোলে, তবে বিগত বছর ধরে বেশিরভাগ পূর্ণ সময়ের অজগর বিকাশের পরেও আমি এখনও নিশ্চিত হয়েছি যে এটি একটি খারাপ ধারণা। আমি এর পিছনে সমস্ত যুক্তি পড়েছি তবে সত্যই, এটি আমার উত্পাদনশীলতার পথে আসে। খুব বেশি কিছু নয়, তবে এটি এখনও স্যাডলের অধীনে একটি সমাধি।
সম্পাদনা করুন: মন্তব্যগুলি বিচার করে কিছু লোক মনে করে আমি আমার কোডটি ইনডেন্ট করতে পছন্দ করি না। এটি একটি ভুল মূল্যায়ন। ভাষাটি যেই হোক না কেন এবং আমি বাধ্য হয়েছি বা না থাকুক না কেন আমি সর্বদা আমার কোড যুক্ত করেছি। আমি যা পছন্দ করি না তা হ'ল এটি হ'ল কোডটি একটি লাইনের ব্লকটি কোন ব্লকে রয়েছে তা সংজ্ঞায়িত করে I আমি তার জন্য সুস্পষ্ট বিসমানকারীদের পছন্দ করি। অন্যান্য কারণগুলির মধ্যে, আমি স্পষ্টভাবে বিভেদকগুলি কোডটি কাটা এবং পেস্ট করা সহজ করে find
উদাহরণস্বরূপ, যদি আমার কাছে একটি ব্লক 4 টি স্পেন যুক্ত থাকে এবং 8 টি ফাঁকা ইন্ডেন্টযুক্ত ব্লকের শেষে এটি পেস্ট করে দেয় তবে আমার সম্পাদকের (সমস্ত সম্পাদক?) কোনও ধারণা নেই যদি আটকের স্থানটি 8-স্পেস ব্লকের অন্তর্ভুক্ত হয় তবে ব্লক। ওটিওহ, যদি আমার স্পষ্টত বিদ্রোহী থাকে তবে কোডটি কোন ব্লকের অন্তর্ভুক্ত এবং এটি কীভাবে পুনরায় চাপানো উচিত তা স্পষ্ট - এটি বুদ্ধিমানভাবে ব্লক সীমানাঙ্কগুলি অনুসন্ধান করে তা করে।
সম্পাদনা 2: কিছু লোক যারা মন্তব্য করেন তাদের মনে হয় এটি এমন একটি বৈশিষ্ট্য যা আমি ঘৃণা করি বা আমার মনে হয় অজগরকে একটি দুর্বল ভাষা করে তোলে। আবার, সত্য নয়। যদিও আমি এটি এতটা পছন্দ করি না, এটি পয়েন্টের পাশে। প্রশ্নটি সবচেয়ে অদ্ভুত ভাষার বৈশিষ্ট্য সম্পর্কে , এবং আমি মনে করি এটি খুব অদ্ভুত, কারণ এটি খুব কিছু, খুব কম (তবে> 0) ভাষা ব্যবহার করে।
আমি এই সম্পর্কে কিছুটা লড়াই করেছি:
1;
পার্ল ইন, মডিউলগুলি সত্য কিছু প্রত্যাবর্তন করতে হবে ।
'Cogito ergo sum';
যা প্রত্যেকেই জানেন যে সমস্ত সম্ভাব্য মহাবিশ্বে স্ব-স্পষ্টভাবে সত্য is এটি সর্বাধিক বহনযোগ্যতা নিশ্চিত করে।"
<?=1;?>
ফেরত 1. <?=true;?>
রিটার্ন 1. <?=false;?>
নালার রিটার্ন।
আমি অবাক হয়েছি যে ভিজ্যুয়াল বেসিকের 7 লুপ কনস্ট্রাক্টসের কথা কেউ উল্লেখ করেনি ।
For i As Integer = 1 to 10 ... Next
While True ... End While
Do While True ... Loop
Do Until True ... Loop
Do ... Loop While True
Do ... Loop Until True
While True ... Wend
স্টিকিং কারণ! আপনার শর্তাধীন সামনে উপায় খুব জটিল!
While
এবং Whend
" করা উচিত, যেহেতু এমন কিছু লোক রয়েছে যারা শব্দহীন ল্যাবিয়ালাইজড ভেলর আনুমানিকের সাথে "যখন" শব্দটি উচ্চারণ করেন। এবং অবশ্যই এটি আরও ভাল লাইন, এবং কোড যে লাইন আপ সুন্দর।
যারা জানেন না তাদের জন্য bc
এটি একটি "নির্বিচারে যথার্থ ক্যালকুলেটর ভাষা" এবং আমি এটি প্রায়শই দ্রুত গণনার জন্য ব্যবহার করি, বিশেষত যখন জড়িত সংখ্যাগুলি বড় হয় ( $
প্রম্পট হয়):
$ bc -lq
12^345
20774466823273785598434446955827049735727869127052322369317059031795\
19704325276892191015329301807037794598378537132233994613616420526484\
93077727371807711237016056649272805971389591721704273857856298577322\
13812114239610682963085721433938547031679267799296826048444696211521\
30457090778409728703018428147734622401526422774317612081074841839507\
864189781700150115308454681772032
bc
দীর্ঘদিন ধরে স্ট্যান্ডার্ড ইউনিক্স কমান্ড ছিল।
এখন "WTF বৈশিষ্ট্য" এর জন্য " এটি man bc
(জোর দেওয়া খনি) থেকে এসেছে :
প্রস্থান : প্রস্থান বিবৃতিটি পড়লে, বিসি প্রসেসরটি সমাপ্ত হয়, যেখানে প্রস্থান বিবৃতি পাওয়া যায় তা নির্বিশেষে। উদাহরণস্বরূপ, "যদি (0 == 1) প্রস্থান করা হয়" এর ফলে বিসি বন্ধ হবে।
হোল্ট : হোল্ট স্টেটমেন্ট (একটি এক্সটেনশন) একটি এক্সিকিউটেড স্টেটমেন্ট যা বিসি প্রসেসরটি কেবলমাত্র মৃত্যুদন্ড কার্যকর করা হলে ছেড়ে দিতে বাধ্য করে। উদাহরণস্বরূপ, "যদি (0 == 1) হল্ট" বিসি বন্ধ করে দেয় না কারণ থামানো কার্যকর হয়নি is
bc
আগে ব্যবহার bc
করতাম এবং ম্যান পৃষ্ঠা থেকে দুর্দান্ত উদ্ধৃতিগুলির কারণে আমার পোস্টে লিখতে চাই ।
echo '[q]sa[ln0=aln256%Pln256/snlbx]sb3135071790101768542287578439snlbxq'|dc
(যদিও আপনি এটি ইতিমধ্যে জেনে থাকতে পারেন)।
আমি সর্বদা ভাবতাম কেন সহজ প্রোগ্রামটি ছিল:
class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
যেখানে এটি হতে পারে:
print "Hello World!"
সম্ভবত এটি কম্পিউটার বিজ্ঞানের শিক্ষার্থীদের প্রথম স্থানে ভয় দেখাতে পারে ...
জাভাস্ক্রিপ্ট অবজেক্ট ওরিয়েন্টেড, তাই না? সুতরাং আক্ষরিক স্ট্রিং এবং সংখ্যায় চলমান পদ্ধতিগুলি কাজ করা উচিত। লাইক "hello".toUpperCase()
এবং 3.toString()
। দেখা যাচ্ছে যে দ্বিতীয়টি একটি সিনট্যাক্স ত্রুটি, কেন? কারণ পার্সার আশা করে যে কোনও সংখ্যার পরে কোনও বিন্দুটি একটি ভাসমান বিন্দু আক্ষরিক হয়ে উঠবে। এটি ডব্লিউটিএফ নয়, ডব্লিউটিএফ হ'ল এটির কাজটি করতে আপনাকে কেবল একটি অন্য বিন্দু যুক্ত করতে হবে:
3..toString()
কারণটি হ'ল আক্ষরিক 3.
হিসাবে ব্যাখ্যা করা হয় 3.0
এবং এটি 3.0.toString()
সূক্ষ্মভাবে কাজ করে।
3..__add__(4)
)। তারপরে আবার আমি মনে করি (3).__add__(4)
এটি করার মতো অনেক কম মস্তিষ্কের ক্ষতি হয়েছে :)
3.0.toString()
আমার চোখ চুলকায়
জাভাস্ক্রিপ্টে:
2 == [2]
// Even stranger
2 == [[[2]]]
// And down-right nutty
var a = { "abc" : 1 };
a[[[["abc"]]]] === a["abc"]; // this is also true
ভাগ্যক্রমে স্ট্যাকওভারফ্লো ডটকমের দয়ালু লোকেরা আমাকে পুরো বিষয়টি ব্যাখ্যা করেছিল: জাভাস্ক্রিপ্টে 2 == [2] কেন?
===
পরিবর্তে ব্যবহার করা উচিত ।
Number(n)
অনুরূপ কিছু করতে ব্যবহার করতে পারেন। দুর্ভাগ্যক্রমে আমাদের উভয় সমাধানের ===
বিরতি = (।
আমার সবচেয়ে বড় ঘৃণ্য বৈশিষ্ট্যটি হ'ল যে কোনও কনফিগারেশন ফাইল সিনট্যাক্স যা শর্তযুক্ত যুক্তি অন্তর্ভুক্ত। এই ধরণের জিনিস জাভা বিশ্বে ছড়িয়ে পড়েছে (পিঁপড়া, মাভেন ইত্যাদি You আপনি জানেন যে আপনি কে!)।
আপনি সীমাবদ্ধ ডিবাগিং এবং সীমাবদ্ধ সম্পাদক সমর্থন সহ, এসি ** পি ভাষায় প্রোগ্রামিং শেষ করেন।
আপনার কনফিগারেশনে যদি আপনার যুক্তি প্রয়োজন হয় তবে একটি বাস্তব ভাষায় কনফিগারেশন কোডিংয়ের "পাইথোনিক" পদ্ধতির চেয়ে অনেক বেশি ভাল।
পাওয়ারবাসিক (www.powerbasic.com) সংকলক নির্দেশাবলী অন্তর্ভুক্ত:
# BLOAT {bloatsize}
এটি <bloatsize>
বাইট দ্বারা নির্বাহযোগ্য সংকলনের আকার বৃদ্ধি করে । এক্সিকিউটেবল তৈরি করা লোকেরা উত্পাদিত এক্সিকিউটেবলের ছোট আকার পছন্দ না করে এমন ক্ষেত্রে সংকলকটিতে এটি স্থাপন করা হয়েছিল। এটি প্রস্ফুটিত প্রোগ্রামিং ভাষার সাথে প্রতিযোগিতা করতে EXE আরও বড় বলে মনে করে :)