حدف تابع main و اجرای کدهای js
۱۴۰۱ مرداد ۱۳, پنجشنبه ساعت ۵:۰۴در ادامه تصمیم دارم که تابع main رو حذف کنم و syntax مربوط به js رو به طور کامل اجرا کنم ...
در ادامه تصمیم دارم که تابع main رو حذف کنم و syntax مربوط به js رو به طور کامل اجرا کنم ...
import از یک فایل دیگه رو انجام دادم
با import کلاس هایی که در فایلی که ازش import شده قابل استفاده هست
import testClass;
import test1Class;
test() {
print("in test function\n");
}
main() {
var a = new test;
a.a();
var a = new test1;
a.a();
test();
var n = new n();
n.a();
}
خب پیاده سازی این قسمت هم تمام شد و مثال های اون رو هم قرار دادم
به سراغ پیاده سازی let میرم و بعد از اون هم پیاده سازی مابقی operator ها
بعد از این پروژه کاملا قابل استفاده هست و با انجام کلی تست میشه از dolang استفاده کرد
class test {
construct( a ) {
print("in construct " + a +"\n" );
print("here\n")
}
a() {
print("in a\n");
return this;
}
b() {
print("in b\n");
}
}
main() {
var a = new test("test");
a.a().b();
print( a );
}
class a {
a() {
print("in a\n");
}
}
class b extends a {
b() {
}
}
main() {
var b = new b;
b.a();
print( b );
}
ساختار کلی آبجکت ها و کلاس ها رو تغییر دادم.
this رو به همه ی توابع اضافه کردم و چندین مثال از function callback و کلاس اضافه کردم.
Callback در Object :
main() {
var o = { 'a' : { 'b' : func(a) { print(a); } } };
print(o);
o.a.b("in function in object");
}
Callback as Return :
test() {
return func( a ) {
print(a);
};
}
main() {
var l = test();
l("test\n");
}
فراخوانی کلاس ها الان با دقت بالاتری انجام میشه و بعید میدونم دیگه خطایی جایی داشته باشم ...
اضافه شدن Class As Param و تغییراتی در صدا زدن متد کلاس ها و نگه داشتن نام کلاس و متدهای کلاس ها داخل object مربوط به کلاس ...
class test {
a() {
print("in a\n");
}
b() {
print("in b\n");
}
}
test(d) {
d.a();
}
main() {
var a = new test;
a.b = "Test";
print("Test");
print( a );
test( a );
a.b();
}
برای تکمیل پروژه باید && و || و یکسری از توابعی که در فایل x86 خالی هستن رو تکمیل کنم تا پروژه تا اینجا برای cpu x86 قابل استفاده باشه
بعدش به سراغ cpu x64 میرم
ایجاد کردن کلاس داخل تابع رو هم انجام دادم. یک تغییر برای let و var هم باید انجام بدم
قسمت هایی که مربوط به کلاس هستن رو هم باید تکمیل کنم
این پروژه خیلی بهتر از اون چیزی که فکر میکردم شد
خب ایجاد کردن تابع در تابع رو هم اضافه کردم. فقط برای تفکیک بین صدا زدن و ایجاد کردن تابع از کلمه ی کلیدی func داخل توابع استفاده کردم ... اگر داخل تابع main امکان اضافه کردن کلاس رو هم اضافه کنم و کلمه ی کلیدی var رو برای متغییر های global و کلمه ی کلیدی let رو برای متغییر لوکال در نظر بگیرم dolang تا اینجای کار شباهت خیلی زیادی به زبان js پیدا میکنه.
main() {
func test( a ) {
print( a );
}
test("str\n");
}
خب قسمت مربوط به callback به طور کامل پیاده سازی شد. میرم سراغ ادامه توسعه مربوط به کلاس ها و قسمت مربوط به construct و destruct و extends و ...
each( arr, cb ) {
for( var k,v in arr ) {
cb( k, v );
}
}
main() {
var arr = [0 : ['name' : 'second'], 1 : ['name' : 'test1'] ];
each(arr, func( k, v) {
print( k );
print( v );
});
}
خب تونستم یک تابع رو داخل یک متغییر نگه دارم و اون رو صدا بزنم.
میرم سراغ اجرا کردن مثال های مختلف از callback. مثلا نگه داشتن یک تابع داخل یک object یا به عنوان ورودی یک تابع ...
main() {
var l = func( a ) {
print("in callback\\n");
print( a );
}
l("test");
}
در کلاس ها صدا زدن یک تابع دیگه از اون کلاس رو اصلاح کردم. و مثال اون رو قرار دادم. چندین فایل دیگه هم قرار دادم که هنوز کار نمیکنن ولی به زودی اون قسمت ها هم پیاده سازی میشن. قسمت هایی شامل پیاده سازی extends و prototype و ...بعدا فایل های تست رو به شکل بهتری دسته بندی میکنم.
class test {
c() {
this.s = "ddd";
}
b() {
print("test ...");
this.d = 123;
}
a() {
this.b();
}
}
main() {
var a = new test;
a.a().c();
print( a );
}