گفتگو هایی در باب سی شارپ

SU-57

Active Member
سلام آقا سجاد
می شه کد قسمت رویداد این کد رو بنویسی طوری که توی پنجره دیالوگ، با یک بار کلیک روی باتون، اعداد 5 و 10 به صورت زیر هم نشون داده بشن. این متد رو نوشتی ولی روش نمایش دادنش یادت رفت بزاری. من یادم نیست که توی آرایه ها این مطلب رو گفته باشی که چطوری تو مقدار آرایه با return برگشت داده می شه. لطفا کدهای تو در تو ننویس منطورم توی MessageBox.show هستش. چون از هر ظرف 4 تا پرانتز بزاری آدم گیج می شه :rose:

کد:
int[] method1()
{
    return new int[] { 5, 10 };
}
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام آقا سجاد
می شه کد قسمت رویداد این کد رو بنویسی طوری که توی پنجره دیالوگ، با یک بار کلیک روی باتون، اعداد 5 و 10 به صورت زیر هم نشون داده بشن. این متد رو نوشتی ولی روش نمایش دادنش یادت رفت بزاری. من یادم نیست که توی آرایه ها این مطلب رو گفته باشی که چطوری تو مقدار آرایه با return برگشت داده می شه. لطفا کدهای تو در تو ننویس منطورم توی MessageBox.show هستش. چون از هر ظرف 4 تا پرانتز بزاری آدم گیج می شه :rose:

کد:
int[] method1()
{
    return new int[] { 5, 10 };
}

سلام
بعد از هر بار خوندنِ اعضای آرایه ، یه n\ اضافه میکنید . کار خاصی نداره .

C#:
            int[] myArray = method1();
            string listShow = "";
            foreach (int item in myArray)
            {
                listShow += item.ToString() + "\n";
            }
            MessageBox.Show(listShow);
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلامی مجدد
استاد ، میگم این ویژال استودیو ، رفت روی نسخه ی 16.10
سال های قبل ، تا نسخه ی 0.9 میرفت . مثلا 15.9 میرفت و در نسخه ی بعدی ، سراغ نسخه ی 16 که واسه ی سال جدید بود میرفت .
پس چه زمانی میخواد نسخه ی visual studio 2021 که همون نسخه ی 17 هست را بده؟!
یا قصدِ دادنِ نسخه ی 2021 را نداره و نسخه ی 2022 را در سال بعد میخواد بده؟


چون از زمانی که نسخه ی preview ی 2021 را بده تا اینکه نسخه ی final اش را بده (و مخصوصا باگ های اولیه اش را رفع کنه در آپدیت های جزئیِ نسخه ی final) چیزی حدود حداقل 3 ماه تا 6 ماه زمان میبره (برای نسخه ی 2019 یعنی نسخه ی 16.0 که این طور بوده) .
همین الانش حدود 3 ماه از 2021 گذشت . همین الان هم نسخه ی preview ی 2021 را بزنه ، تقریبا 3 ماه آخرِ 2021 نسخه ی 17.0 فینال میاد .
تشکر استاد .
 

the_king

مدیرکل انجمن
سلامی مجدد
استاد ، میگم این ویژال استودیو ، رفت روی نسخه ی 16.10
سال های قبل ، تا نسخه ی 0.9 میرفت . مثلا 15.9 میرفت و در نسخه ی بعدی ، سراغ نسخه ی 16 که واسه ی سال جدید بود میرفت .
پس چه زمانی میخواد نسخه ی visual studio 2021 که همون نسخه ی 17 هست را بده؟!
یا قصدِ دادنِ نسخه ی 2021 را نداره و نسخه ی 2022 را در سال بعد میخواد بده؟
این Visual Studio 2021 کی تبلیغ شده بود که حالا ارائه اش به تاخیر افتاده باشه؟ شاید شما دلتون بخواد که Visual Studio 2021 ای باشه ولی مایکروسافت بصورت رسمی همچین محصولی رو در Roadmap اش اعلام نکرده بود. در ضمن هر پروژه ای میتونه بخاطر انواع مسائل به تاخیر بیافته، کنسل بشه و الزامی نداره که حتما با همون اسم ارائه بشه، ممکنه موقع ارائه اسم یا نسخه اش تغییر کنه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون استاد .
استاد ، میگم یه IDE هست برای .net به نام Rider .
سایتِ خوبی برای مقایسه ی این نرم افزار با Visual Studio پیدا نکردم .
جز سایت رسمیِ سازنده ی Rider که jetbrains هست و مشخصه که نقاط قوت خودش را بیشتر تمرکز میکنه برای مقایسه :


یه سایت واقعی برای مقایسه ی Rider و Visual Studio که دور از تعصب مقایسه کنه ، میدونید (و لینکش را میدید) ؟

و نظر شما درباره ی مقایسه ی این دو نرم افزار چیه؟
این طور که بعضی سایت ها (ی انگلیسی) میگن (که البته بیشتر نظر شخصی نویسنده انگار هست) ، گاها Rider را قویتر از Visual Studioجلوه میدن . و حداقلش میگن که در بعضی موارد ، چندان ضعیف تر نیست و در بیشتر موارد ، برابر یا قویتر هست .

تشکر استاد .
 

the_king

مدیرکل انجمن
خیلی ممنون استاد .
استاد ، میگم یه IDE هست برای .net به نام Rider .
سایتِ خوبی برای مقایسه ی این نرم افزار با Visual Studio پیدا نکردم .
جز سایت رسمیِ سازنده ی Rider که jetbrains هست و مشخصه که نقاط قوت خودش را بیشتر تمرکز میکنه برای مقایسه :


یه سایت واقعی برای مقایسه ی Rider و Visual Studio که دور از تعصب مقایسه کنه ، میدونید (و لینکش را میدید) ؟

و نظر شما درباره ی مقایسه ی این دو نرم افزار چیه؟
از مقایسه ایندو قوی و ضعیف مشخص نمیشه، هر دوشون IDE هستند ولی ابعادشون با هم نمیخونه. همانطور که Paint و Photoshop هر دو نرم افزار طراحی و ویرایش تصویر هستند ولی ابعادشون با هم جور در نمیاد.
از مقایسه اینجور موارد فقط یک سوال در میاد، "سبک با امکانات کمتر" یا "سنگین با امکانات بیشتر"؟ در یک سطح نیستند که قوی و ضعیف مشخص بشه.

ویژوال استدیو یک IDE خیلی مجهز و تمام عیار ئه که طبعا سنگین تره، Rider یک IDE سبک بر پایه IntelliJ IDEA ئه که بخاطر سبک بودنش روی سیستم های ضعیف که ویژوال استدیو مخصوصا با ReSharper بیش از حد کند میشه کارکرد بهتری داره. البته اگر کسی دنبال IDE سبک باشه هم الزاما Rider رو نمی تونه انتخاب کنه چون یک نقطه ضعف داره که روی ویندوز های 32 بیتی قابل نصب نیست.

این طور که بعضی سایت ها (ی انگلیسی) میگن (که البته بیشتر نظر شخصی نویسنده انگار هست) ، گاها Rider را قویتر از Visual Studioجلوه میدن . و حداقلش میگن که در بعضی موارد ، چندان ضعیف تر نیست و در بیشتر موارد ، برابر یا قویتر هست .
ملاک مقایسه هر چیز جزئی میتونه باشه اما از این ملاک های جزئی نتیجه گیری کلی در نمیاد. شما می توانید ده تا ملاک انتخاب کنید که در هر ده تا x بر y برتری داره، اما نمی توانید نتیجه بگیرید که پس x قوی تر از y ئه. ممکنه صد تا ملاک دیگه باشه که نقطه قوت y باشه یا اصلا هزار تا ملاک دیگه هم x برتری داشته باشه. اصلا نمیشه از روی n ملاک نتیجه کلی گرفت که در کل چی قوی تره.
مثلا Paint از Photoshop سریعتر بالا میاد، حافظه کمتری لازم داره، ابزار ها و رسمش سریعتره و ... اینها همگی با توجه به سبک و ساده بودن Paint عادی و طبیعی است، اما از این ملاک های جزئی نمیشه نتیجه گرفت که پس در بیشتر موارد Paint از Photoshop قوی تره، میشه نتیجه گرفت که در اون ملاک های جزئی Paint برتری داره.
 

SU-57

Active Member
سلام به استاد علی و آقا سجاد

پیشاپیش عید نوروز 1400 رو به شما بزرگواران تبریک عرض می کنم و سال خوب و خوشی همراه با عافیت، تندرستی و خوشبختی رو برای شما و خانواده محترمتون آرزو می کنم.

کد زیر که در عکس مشخصه که مربوط به سی شارپ 7 است

a1.jpg

طبق گفته های آقا سجاد همیشه طرف راست تساوی در طرف چپ ریخته می شه و طبق این قاعده در خط دوم ref a اشاره می کنه به متغیر a که مقدارش 10 است و بعد این 10 به متغیر b نسبت داده می شه و اشاره می کنه. بعد در خط سوم مقدار متغیر b که 10 شده به 50 تغییر پیدا می کنه و موقع نشون دادن همون 50 نشون داده می شه.

اما الان مشکل من اینه که نمی دونم آخه چطور وقتی مقدار متغیر b در خط سوم به 50 تغییر پیدا کرده مقدار متغیر a هم 50 می شه و چطوری متغیر b روی متغیر a هم اثر میذاره که طبق چیزی که قبلا یاد گرفتم نباید اینجوری باشه
 

the_king

مدیرکل انجمن
سلام به استاد علی و آقا سجاد

پیشاپیش عید نوروز 1400 رو به شما بزرگواران تبریک عرض می کنم و سال خوب و خوشی همراه با عافیت، تندرستی و خوشبختی رو برای شما و خانواده محترمتون آرزو می کنم.
به همچنین.
کد زیر که در عکس مشخصه که مربوط به سی شارپ 7 است

مشاهده پیوست 113877

طبق گفته های آقا سجاد همیشه طرف راست تساوی در طرف چپ ریخته می شه و طبق این قاعده در خط دوم ref a اشاره می کنه به متغیر a که مقدارش 10 است و بعد این 10 به متغیر b نسبت داده می شه و اشاره می کنه. بعد در خط سوم مقدار متغیر b که 10 شده به 50 تغییر پیدا می کنه و موقع نشون دادن همون 50 نشون داده می شه.

اما الان مشکل من اینه که نمی دونم آخه چطور وقتی مقدار متغیر b در خط سوم به 50 تغییر پیدا کرده مقدار متغیر a هم 50 می شه و چطوری متغیر b روی متغیر a هم اثر میذاره که طبق چیزی که قبلا یاد گرفتم نباید اینجوری باشه
int a یک متغیر از نوع int ئه، مقدارش مال خودشه، یک حافظه int داره که میتونه داخلش 10 یا 50 رو نگهداره.
اما ref int b یک متغیر از نوع int نیست، ارجاعی به int است، b برای خودش یک حافظه int نداره، b نمیتونه هیچ int ای رو مستقلا نگهداری کنه، چه 10 و چه 50 داخل خود b نمیتونه ثبت بشه، b فقط میتونه به یک داده int ارجاع بده، یعنی بگه داده در فلان جا است.
برای همینه که فرضا نمیشه نوشت ;ref int b = 10 چون اون 10 یک داده مستقل ئه، ref int نمیتونه یک داده int مستقل برای خودش داشته باشه، باید به یک int مستقل مثل a ارجاع کنه، خودش حافظه ای برای نگهداری اون int نداره.
اون b الان شبیه یک اسم مستعار برای همون a شده، وقتی می نویسید a = 50 مقدار داخل a رو 50 می کنید و وقتی می نویسید b = 50 باز هم همچنان مقدار a رو 50 می کنید، مقدار خود b رو عوض نمی کنید چون b اصلا int نیست که بتونه مقدار 50 رو نگهداره.
 

sahar24

New Member
سلام خسته نباشید من در برنامه اندروید استدیو مشکلی برام پیش اومده با خطای زیر مواجه شدم نمی دونستم در کدوم پخش میتونم سوال کنم ممنون میشم اگر راهنمایی کنید2021-04-08_10-27-19.png
 

the_king

مدیرکل انجمن
سلام خسته نباشید من در برنامه اندروید استدیو مشکلی برام پیش اومده با خطای زیر مواجه شدم نمی دونستم در کدوم پخش میتونم سوال کنم ممنون میشم اگر راهنمایی کنیدمشاهده پیوست 113897
معمولا این خطا بخاطر عدم دسترسی به منابع اینترنتی است. رجوع شود به :
 

SU-57

Active Member
سلام

من دارم آموزش سی شارپ نگاه می کنم و همینجوری سوال برام به وجود میاد

1- می خوام ببینم راهی وجود داره که بشهمقدار متغیر a رو هر طوری شده نمایش بده

کد:
{
    int a = 10;
}
MessageBox.Show(a.ToString());

2- می خوام ببینم می شه عدد 0 پشت شماره تلفن نمایش داده بشه چون توی string میذارم underline ها رو هم نشون میده. می دونم که 0 پشت عدد بی ارزشه ولی می خوام نشون داده بشه. البته می تونم یک string با مقدار 0 ایجاد کنم و پشت شماره تلفن ها بزارم ولی می خواستم ببینم غیر از این روش ها به طور مستقیم امکان نشون دادن 0 پشت عدد وجود داره.

کد:
long a = 0912_125_6724;
MessageBox.Show(a.ToString());


3- استاد علی این کد دقیقه 1:44 در فیلم زیر خظا میده روش حلش ممکنه یا از اساس غیر ممکنه البته اگه کل ref ها رو برداریم درست می شه ولی با ref کار نمی کنه و ارور میده. (البته من لینک رو توی کد میذارم به خاطر سئوی سایت. اگه برای سئوی سایت مشکلی نداره لطفا بفرمایید که از این به بعد به صورت مستقیم قرار بدم)

کد:
https://uupload.ir/view/tzbq_a.mp4/
 

the_king

مدیرکل انجمن
سلام

من دارم آموزش سی شارپ نگاه می کنم و همینجوری سوال برام به وجود میاد

1- می خوام ببینم راهی وجود داره که بشهمقدار متغیر a رو هر طوری شده نمایش بده

کد:
{
    int a = 10;
}
MessageBox.Show(a.ToString());
خیر. اون a صرفا در همون محدوده بلوک کد مابین { و } تعریف شده، خارج از اون محدوده، a ای که به اون تعریف داخل بلوک ربط داشته باشه وجود نداره. و تنها در حالتی اون 10 به خارج از بدنه اون بلوک میتونه انتقال داده بشه که داخل همون بلوک به متغیری، فیلدی، مشخصه ای و کلا یک منبع داده دیگری کپی اش کنید، فرضا یک b ای بیرون از اون بلوک از قبل تعریف کرده باشید و ;b = a رو پیش از خروج از اون بلوک کد اجرا کنید، وگرنه به محض خروج از اون بلوک دیگه a و حافظه اش از دست میره.
2- می خوام ببینم می شه عدد 0 پشت شماره تلفن نمایش داده بشه چون توی string میذارم underline ها رو هم نشون میده. می دونم که 0 پشت عدد بی ارزشه ولی می خوام نشون داده بشه. البته می تونم یک string با مقدار 0 ایجاد کنم و پشت شماره تلفن ها بزارم ولی می خواستم ببینم غیر از این روش ها به طور مستقیم امکان نشون دادن 0 پشت عدد وجود داره.
در داده عددی مثل long که به هیچ وجه نمی توانید 0 بدون ارزش رو ذخیره کنید، جایی که نگهداریش کنه نداره. اما می توانید یک متد دلخواه ToString برای long بنویسید یا اگه از string استفاده می کنید یک تابع تبدیل خاص برای string بنویسید که در جایی که میخواهید اون مقدار تلفن رو نمایش بدهید با قالبی اینکار رو انجام بده که مطلوب شما است. یعنی فرضا 9123456789 رو در long ذخیره کنید ولی متد تبدیلش به string رو طوری بنویسید که به رشته 6789 345 0912 تبدیلش کنه.
3- استاد علی این کد دقیقه 1:44 در فیلم زیر خظا میده روش حلش ممکنه یا از اساس غیر ممکنه البته اگه کل ref ها رو برداریم درست می شه ولی با ref کار نمی کنه و ارور میده. (البته من لینک رو توی کد میذارم به خاطر سئوی سایت. اگه برای سئوی سایت مشکلی نداره لطفا بفرمایید که از این به بعد به صورت مستقیم قرار بدم)

کد:
https://uupload.ir/view/tzbq_a.mp4/
مشکلی از نظر سئو وجود نداره. مشکل پیچیده ای نیست، فرض کنید که همچین کدی دارید :
C#:
            int a = 10;
            ref int b = a;
ایراد این کد بالا چیه؟ اینه که مقداری که در سمت راست داخل b قرار میگیره باید ref int باشه، نه int
a چی بود؟ یک int. ما که نمی توانیم مقدار int رو داخل ref int قرار بدهیم، پس باید بین a و = یک ref قرار بدهیم تا ref اش در b قرار بگیره :
C#:
            int a = 10;
            ref int b = ref a;
باز یک مثال دیگه، فرض کنید همچین کدی داریم :
C#:
            int a = 10;
            ref int b = ref a;
            ref int c = b;
ایراد در مقدار دهی c وجود داره، چون c یک ref int ئه و b به تنهایی مقدار a رو بر میگردونه، یعنی 10 که یک int ئه رو میخواد داخل c قرار بده که نمیشه.
اشکال مشابه مثال قبلی است، ایراد میگیره که چرا در سمت راست = اون کلمه کلیدی ref از قلم افتاده، با اضافه کردن اون ref مشکل حل میشه :
C#:
            int a = 10;
            ref int b = ref a;
            ref int c = ref b;
حالا بریم سراغ اون کدی که شما بهش اشاره می کنید :
C#:
        private void button78_Click(object sender, EventArgs e)
        {
            ref int a = Method16();
        }

        ref int Method16()
        {
            int[] a = new int[] { 10 };
            a[0] = 50;
            return ref a[0];
        }
روی اینکه داخل ()Method16 چی نوشته شده تمرکز نکنید، فقط به این توجه کنید که مقدار بازگشتی از ()Method16 از چه نوعی است؟ ref int، خوب الان اشکال این کد شبیه همون مثالی است که من زدم :
C#:
            ref int a = Method16();
میخواد بدون اینکه در سمت راست = از ref استفاده کنه مقدار int ای که ()Method16 بهش ارجاع داده رو داخل a قرار بده، خوب نمیشه. باید در سمت راست = ئه ref باشه :
C#:
        private void button78_Click(object sender, EventArgs e)
        {
            ref int a = ref Method16();
        }
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
C#:
            int a = 10;
            ref int b = ref a;
            ref int c = b;
ایراد در مقدار دهی c وجود داره، چون c یک ref int ئه و b به تنهایی مقدار a رو بر میگردونه، یعنی 10 که یک int ئه رو میخواد داخل c قرار بده که نمیشه.
اشکال مشابه مثال قبلی است، ایراد میگیره که چرا در سمت راست = اون کلمه کلیدی ref از قلم افتاده، با اضافه کردن اون ref مشکل حل میشه :
C#:
            int a = 10;
            ref int b = ref a;
            ref int c = ref b;

سلام استاد .
استاد ، یعنی وقتی مینویسیم ref int b ، این b ئه ، در واقع int هه و اشاره ای به اشاره گرها نداره مگر اینکه ref را همراش بیاریم؟

اگه جوری میکردن که وقتی یه متغییری از نوعِ ref ئه نوعی دیگه بود (مثل متغییر b که گفتید) ، وقتی این متغییر را توی متغییرِ ref ئه دیگه بخوایم بریزیم (متغییر c که گفتید) ، دیگه کلمه ی ref را نذاریم ، خیلی بهتر و خواناتر میشد چون ref را برای متغییر b ، زمانی که میخواستیم متغییر b را تعریف کنیم ، گذاشته بودیم دیگه .

تشکر استاد .
 

the_king

مدیرکل انجمن
سلام استاد .
استاد ، یعنی وقتی مینویسیم ref int b ، این b ئه ، در واقع int هه و اشاره ای به اشاره گرها نداره مگر اینکه ref را همراش بیاریم؟
خود b هیچوقت int نیست ولی اینکه اگر بدون ref همراهش استفاده اش کنید مقدار int بر میگردونه درسته.
برنامه نویس بر اساس اینکه اون ref رو بنویسه یا ننویسه میتونه تصمیم بگیره که ارجاع رو میخواد یا مقدار رو.
اگه جوری میکردن که وقتی یه متغییری از نوعِ ref ئه نوعی دیگه بود (مثل متغییر b که گفتید) ، وقتی این متغییر را توی متغییرِ ref ئه دیگه بخوایم بریزیم (متغییر c که گفتید) ، دیگه کلمه ی ref را نذاریم ، خیلی بهتر و خواناتر میشد چون ref را برای متغییر b ، زمانی که میخواستیم متغییر b را تعریف کنیم ، گذاشته بودیم دیگه .
در زبان های برنامه نویسی سیستم نوع (type system) مشخص می کنه که نوع دهی به مقادیر در اون زبان چقدر سخت گیرانه است.
زبان #C از این لحاظ سخت گیرانه است، یک زبان strong typing ئه، بر خلاف مثلا ویژوال بیسیک که یک زبان weakly typing ئه.
این خصوصیت یک زبان ئه، بهتر یا بدتری وجود نداره، هر کدوم مزایا و معایب خودشون رو دارند.
رجوع شود به :
نوع‌دهی نیرومند و سست
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون استاد .
استاد ، یه سئوال درباره ی نرم افزارهای ضبط ویدئو داشتم . هر چند به سی شارپ مربوط نمیشه اما جوابی که پیدا کردم ، به قضیه ی نخ ها و برنامه نویسی مربوط میشه .

مشکل اینجاست که وقتی با camtasia (البته نرم افزارهای ضبط کننده ی دیگه هم تا اون جا که میدونم همینطورن) ، ویدئو و صوتی را ضبط میکنیم ، گاها ممکنه که طولِ صدا و تصویر ، از هم متفاوت باشه (احتمال داره این تفاوت همیشه وجود داشته باشه حالا طول مدت تفاوت شون فرق کنه در هر بار ضبط) .

در لینک زیر (که ممکنه سازنده ی نرم افزار هم باشه) ، چنین جوابی داد :


که چون 4 جریان (صدای میکروفون و تصویر و وب کم و صدای سیستم) را هر کدوم در نخ های مجزا ضبط میکنن و وقتی دکمه ی stop (و شاید هم دکمه ی pause) را که میزنیم ، همه شون همزمان متوقف نمیشن (میگه چون زمانی که وسیله های مختلف مثل وب کم بخوان پاسخ بدن ، طولانی تر هه . البته من وب کم ندارم و باز این مشکل هم وجود داره) .

حالا سئوالم اینه که آیا بجای استفاده از 4 نخ ، همه ی اون جریان ها را در 1 نخ ضبط میکردن ، باز هم زمانی که دکمه ی stop (و شاید هم دکمه ی pause) زده میشد ، باز این مشکل وجود میداشت؟
و سئوال دیگه اینکه چرا همه شون را در 1 نخ ضبط نمیکنن؟ بعید میدونم 1 نخ نتونه این 4 جریان را مدیریت کنه .

تشکر استاد .
 

the_king

مدیرکل انجمن
خیلی ممنون استاد .
استاد ، یه سئوال درباره ی نرم افزارهای ضبط ویدئو داشتم . هر چند به سی شارپ مربوط نمیشه اما جوابی که پیدا کردم ، به قضیه ی نخ ها و برنامه نویسی مربوط میشه .

مشکل اینجاست که وقتی با camtasia (البته نرم افزارهای ضبط کننده ی دیگه هم تا اون جا که میدونم همینطورن) ، ویدئو و صوتی را ضبط میکنیم ، گاها ممکنه که طولِ صدا و تصویر ، از هم متفاوت باشه (احتمال داره این تفاوت همیشه وجود داشته باشه حالا طول مدت تفاوت شون فرق کنه در هر بار ضبط) .

در لینک زیر (که ممکنه سازنده ی نرم افزار هم باشه) ، چنین جوابی داد :


که چون 4 جریان (صدای میکروفون و تصویر و وب کم و صدای سیستم) را هر کدوم در نخ های مجزا ضبط میکنن و وقتی دکمه ی stop (و شاید هم دکمه ی pause) را که میزنیم ، همه شون همزمان متوقف نمیشن (میگه چون زمانی که وسیله های مختلف مثل وب کم بخوان پاسخ بدن ، طولانی تر هه . البته من وب کم ندارم و باز این مشکل هم وجود داره) .

حالا سئوالم اینه که آیا بجای استفاده از 4 نخ ، همه ی اون جریان ها را در 1 نخ ضبط میکردن ، باز هم زمانی که دکمه ی stop (و شاید هم دکمه ی pause) زده میشد ، باز این مشکل وجود میداشت؟
و سئوال دیگه اینکه چرا همه شون را در 1 نخ ضبط نمیکنن؟ بعید میدونم 1 نخ نتونه این 4 جریان را مدیریت کنه .

تشکر استاد .
من از شیوه ای که برای ضبط استفاده می کنند اطلاعی ندارم اما در نظر بگیرید که اون نخ ای که مسئول ضبط کردن فلان داده ها است، مثلا ویدئو، داره با فرکانس مشخصی (مثلا 24 فریم در ثانیه) داده های تصویر رو میخونه و فشرده می کنه. ممکنه برای خوندن هر فریم فقط یک میلی ثانیه زمان لازم داشته باشه و که در مقابل یک ثانیه خیلی زمان کمی است. به اصطلاح کارش سبک ئه، اما به هر حال در حین اون یک میلی ثانیه میتونه همزمان صوت رو بخونه؟ نمیتونه. نخ که نمیتونه همزمان دو تا کار متفاوت رو انجام بده. پس اگر در اون لحظه بخواد صوت رو هم نمونه برداری کنه باید یک میلی ثانیه صبر کنه و نمونه برداری صوت به تاخیر بیافته و در نتیجه فرکانس نمونه برداری صوت نامنظم میشه و دیگه قابل جبران نیست.
اگه بخواد همزمان صوت رو با فرکانس دیگری (مثلا 44.1kHz یا 44100 نمونه در ثانیه) بخونه، هر چقدر هم که پردازنده قوی باشه و نمونه برداری سریع انجام بشه به هر حال هم ویدئو و هم صوت با فرکانس های نامنظم و اینور و اونور خونده شده. مجزا بودن نخ ها باعث میشه که انجام هر روال روی دقت فرکانس سایر روال ها تاثیر منفی نذاره.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون استاد . :rose:

استاد ، میگم 2 دسته نرم افزارهای وب داریم . یکی سمت سرور و یکی دیگه هم سمت کلاینت . درسته؟

نرم افزار سمت سرور ، همین چیزهایی و صفحات وب ای هست که مرورگر وب مون بالا میاره . درسته؟
مثلا توی همین صفحه ای که از انجمن مجید آنلاین دارم این پست را براتون مینویسم ، این همون در واقع نرم افزار سمت سرور درون سرورهای مجید آنلاین هست . این طوره؟

نرم افزار سمت کلاینت ، همون نرم افزارهایی هستن که درون سیستم کاربران نصب میشن . درسته؟
مثل مرورگر اینترنت و پیام رسان ها (مثل سروش و ...) و از این دست نرم افزارها . درسته؟
اگه آره ، الان مثلا با blazor یا javascript میشه نرم افزارهای سمت کلاینت ساخت . پس فرقی با نرم افزارهای دسکتاپ و اندروید و اینها نباید داشته باشن . یعنی اگه این طور باشه ، همین نرم افزارها را با desktop app یا xamarin app هم میشه نوشت دیگه . درسته؟ پس تفاوت blazor یا javascript با desktop app یا xamarin app ها چی هستن؟

تشکر استاد
 

the_king

مدیرکل انجمن
سلام استاد .
استاد ، یعنی وقتی مینویسیم ref int b ، این b ئه ، در واقع int هه و اشاره ای به اشاره گرها نداره مگر اینکه ref را همراش بیاریم؟
b در واقع یا در هر چیز دیگری int نیست. وقتی b رو به تنهایی بکار می برید فقط ارجاع میده، b به تنهایی مقدار چیزی رو بر میگردونه که بهش ارجاع میده، b خودش int نیست، مقداری که بهش ارجاع میده int است، نه خودش. برای همین b به تنهایی یک int رو برمیگردونه، نه به این خاطر که b در واقع int باشه.
وقتی ref b رو بکار می برید مقدار b رو برمیگردونه، یعنی ref b مقدار ارجاع رو برمیگردونه که میتونید بگید یک اشاره گر ئه.
اگه جوری میکردن که وقتی یه متغییری از نوعِ ref ئه نوعی دیگه بود (مثل متغییر b که گفتید) ، وقتی این متغییر را توی متغییرِ ref ئه دیگه بخوایم بریزیم (متغییر c که گفتید) ، دیگه کلمه ی ref را نذاریم ، خیلی بهتر و خواناتر میشد چون ref را برای متغییر b ، زمانی که میخواستیم متغییر b را تعریف کنیم ، گذاشته بودیم دیگه .
بهتر و بدتری وجود نداره، هیچ ویژگی ای فقط مزایا یا فقط معایب که نداره. اگه weakly typing بهتر از strong typing باشه پس می توانید تکلیف دنیای برنامه نویسی رو روشن کنید و زبان های برنامه نویسی رو از بهترین تا بدترین مرتب کنید، همچین قاعده ای نیست.

در ضمن این خیلی بهتر و خواناتری که ازش حرف می زنید رو بررسی بکنیم؟
فرض کنیم که int a ای داریم و ref int x ای که به اون a ارجاع داده. یعنی x یک نام مستعار برای a محسوب میشه.
یعنی اگر بنویسید ;x = 5 چه اتفاقی می افته؟ مقدار a به 5 تغییر می کنه، x هم همچنان به a ارجاع داده.
حالا اگر یک int b ای داشته باشیم و ref int y به اون b ارجاع داده باشه و بنویسید ;x = y چه اتفاقی قراره بیافته؟
اصولا و طبق تعریف زبان #C یک حالت بیشتر نداره، اگر x رو به عنوان نام مستعار برای a به رسمیت بشناسید و y رو به عنوان نام مستعار برای b، اونوقت باید مقدار b در a قرار بگیره و x و y هم همچنان به همون a و b که ارجاع می دادند بمانند، یعنی ارجاع های x و y تغییری نمی کنه.
C#:
            int a = 1;
            int b = 2;
            ref int x = ref a;
            ref int y = ref b;
            x = y;
            MessageBox.Show($"a={a}  b={b}  x={x}  y={y}");
اما اگر از خودتون قاعده جدید اختراع کرده باشید، توصیف دیگری دارید که باید ارجاع x تغییر کنه و x به b ارجاع بده، a رو با اون مقدار قبلی اش ول کنه و به b ارجاع بده. یعنی یا قاعده جدیدتون ;x = ref y رو به صورت x = y خلاصه می کنید :
C#:
            int a = 1;
            int b = 2;
            ref int x = ref a;
            ref int y = ref b;
            x = ref y;
            MessageBox.Show($"a={a}  b={b}  x={x}  y={y}");
با این فرض شما پس حالت قبلی با چه کدی باید نوشته میشد؟ اگر قرار باشه x = y با x = ref y به یک شکل نوشته بشه، کامپایلر و برنامه نویس با دیدن ;x = y میتونه تشخیص بده که x میخواد مقدار خودش رو تغییر بده یا مقدار متغیری که بهش ارجاع میده؟ این کجاش بهتر و خواناتر ئه؟
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
b در واقع یا در هر چیز دیگری int نیست. وقتی b رو به تنهایی بکار می برید فقط ارجاع میده، b به تنهایی مقدار چیزی رو بر میگردونه که بهش ارجاع میده، b خودش int نیست، مقداری که بهش ارجاع میده int است، نه خودش. برای همین b به تنهایی یک int رو برمیگردونه، نه به این خاطر که b در واقع int باشه.
وقتی ref b رو بکار می برید مقدار b رو برمیگردونه، یعنی ref b مقدار ارجاع رو برمیگردونه که میتونید بگید یک اشاره گر ئه.

بهتر و بدتری وجود نداره، هیچ ویژگی ای فقط مزایا یا فقط معایب که نداره. اگه weakly typing بهتر از strong typing باشه پس می توانید تکلیف دنیای برنامه نویسی رو روشن کنید و زبان های برنامه نویسی رو از بهترین تا بدترین مرتب کنید، همچین قاعده ای نیست.

در ضمن این خیلی بهتر و خواناتری که ازش حرف می زنید رو بررسی بکنیم؟
فرض کنیم که int a ای داریم و ref int x ای که به اون a ارجاع داده. یعنی x یک نام مستعار برای a محسوب میشه.
یعنی اگر بنویسید ;x = 5 چه اتفاقی می افته؟ مقدار a به 5 تغییر می کنه، x هم همچنان به a ارجاع داده.
حالا اگر یک int b ای داشته باشیم و ref int y به اون b ارجاع داده باشه و بنویسید ;x = y چه اتفاقی قراره بیافته؟
اصولا و طبق تعریف زبان #C یک حالت بیشتر نداره، اگر x رو به عنوان نام مستعار برای a به رسمیت بشناسید و y رو به عنوان نام مستعار برای b، اونوقت باید مقدار b در a قرار بگیره و x و y هم همچنان به همون a و b که ارجاع می دادند بمانند، یعنی ارجاع های x و y تغییری نمی کنه.
C#:
            int a = 1;
            int b = 2;
            ref int x = ref a;
            ref int y = ref b;
            x = y;
            MessageBox.Show($"a={a}  b={b}  x={x}  y={y}");
اما اگر از خودتون قاعده جدید اختراع کرده باشید، توصیف دیگری دارید که باید ارجاع x تغییر کنه و x به b ارجاع بده، a رو با اون مقدار قبلی اش ول کنه و به b ارجاع بده. یعنی یا قاعده جدیدتون ;x = ref y رو به صورت x = y خلاصه می کنید :
C#:
            int a = 1;
            int b = 2;
            ref int x = ref a;
            ref int y = ref b;
            x = ref y;
            MessageBox.Show($"a={a}  b={b}  x={x}  y={y}");
با این فرض شما پس حالت قبلی با چه کدی باید نوشته میشد؟ اگر قرار باشه x = y با x = ref y به یک شکل نوشته بشه، کامپایلر و برنامه نویس با دیدن ;x = y میتونه تشخیص بده که x میخواد مقدار خودش رو تغییر بده یا مقدار متغیری که بهش ارجاع میده؟ این کجاش بهتر و خواناتر ئه؟

خیلی ممنون استاد .
نکته ی جالبی بود .
بله ، من تفسیر کد دوم ای که داده بودید را داشتم .
کد اول ، برام جالب بود . در کد اول (x=y) ، اشاره گر را تغییر نمیده . بلکه مقدار (ی که اشاره گرِ y ، بهش اشاره میکنه که مقدار متغییر b که همون 2 هست ، این مقدارِ 2) را در اشاره گرِ x که به متغییر a اشاره میکنه ، میریزه .
در واقع مقدار متغییر x تغییر میکنه . که برابر با مقدار متغییر b میشه .
این نکته جالب بود . که x = y با x = ref y هم فرق داره و هم با این دو حالت که 2 نتیجه ی متفاوت داره میشه نوشت .

حالا استاد ، در پست قبلی ، سئوالم درباره ی اپلیکیشن های وب هه که جریانش چیه؟
تشکر استاد .
 

the_king

مدیرکل انجمن
خیلی ممنون استاد .
نکته ی جالبی بود .
بله ، من تفسیر کد دوم ای که داده بودید را داشتم .
کد اول ، برام جالب بود . در کد اول (x=y) ، اشاره گر را تغییر نمیده . بلکه مقدار (ی که اشاره گرِ y ، بهش اشاره میکنه که مقدار متغییر b که همون 2 هست ، این مقدارِ 2) را در اشاره گرِ x که به متغییر a اشاره میکنه ، میریزه .
در واقع مقدار متغییر x تغییر میکنه . که برابر با مقدار متغییر b میشه .
این نکته جالب بود . که x = y با x = ref y هم فرق داره و هم با این دو حالت که 2 نتیجه ی متفاوت داره میشه نوشت .

حالا استاد ، در پست قبلی ، سئوالم درباره ی اپلیکیشن های وب هه که جریانش چیه؟
تشکر استاد .
بخش کلاینت در برنامه های تحت وب اون بخشی است که در مرورگر وب سمت کاربر اجرا میشه، نه اینکه خود مرورگر رو بخشی از اون بحساب بیارید.
مثلا کدی که مرورگر تون با Javascript و VBScript اجرا میکنه. خود نرم افزار مرورگر یک برنامه عادی ئه، جزئی از Client یک نرم افزار تحت وب محسوب نمیشه. مرورگر شما یک برنامه دسکتاپ ئه، تحت وب نیست.

بخش سرور برنامه تحت وب فقط در سرور اجرا میشه که کاربر ازش اطلاعی نداره، مثلا یک کد php در سمت سرور اجرا میشه، در مرورگر کاربر اجرا نمیشه.
و خروجی این اجرای سمت سرور یک صفحه html یا json یا عکس یا ویدئو یا هر چیزی دیگری است که مرورگر دریافت می کنه. هر کدی فرضا javascript که در مرورگر شما اجرا بشه مربوط به بخش کلاینت ئه. این چیزی که از ظاهر سایت می بینید مربوط به بخش کلاینت ئه.
web.whatsapp.com یا Office 365 تحت وب هستند، نصب نمیشن، در مرورگر های متنوع باز میشن. اما برنامه تلگرام یا هر Messenger ای که روی ویندوز نصب می کنید برنامه تحت وب نیستند، برنامه دسکتاپ هستند. طبعا وقتی یک زبان و پلتفرمی تحت مرورگر وب قابل اجرا نباشه برای بخش کلاینت نرم افزار های تحت وب هم قابل استفاده نیست.
 

جدیدترین ارسال ها

بالا