PDA

View Full Version : سوال: منظور از داده های اسکالر چیست؟



Beginner Programmer
سه شنبه 21 آبان 1392, 17:05 عصر
سلام به همه ی دوستان برنامه نویس
میخواستم بدونم منظور از داده های اسکالر در زبان برنامه نویسی چیه؟
ممنون میشم اگر راهنمائیم کنید
با تشکر"علی"

ابوذر محمودی
سه شنبه 21 آبان 1392, 19:08 عصر
سلام
این اطلاعات مربوط به 3 سال پیشه که تو درس PL خوندم ، اگه اشتباس دوستان تصحیح کنند.
اسکالر ها، یک ارزش واحدی نشون میدن ، یعنی میتونن یک نوع مقدار در خودشون ذخیره کنن.
این نوع داده ها اسکالر هستند :
-انواع داده عددی شامل ، صحیح و اعشاری
-انواع بولین
-کاراکتر ، البته چون دنباله ای از کاراکتر ها یک رشته رو تشکیل میدن ، پس بهتره به جای کاراکتر نوع رشته ای رو بیان کنیم.

و اگر اشتباه نکنم نوع داده اسکالر همون EDT ها هستند که مستقیماَ توسط سخت افزار پشتیبانی میشه.

بقیه داده ها هم ترکیبی از اینهاس دیگه ، مثلا آرایه ، استراکت ، یونیون ، اشاره گرها.

خلاصش اینه که تک مقداری ها اسکالرن و چند مقداری ها مرکب یا ترکیبی.

مثلا یک ساختمان در زبان C میتونه چندین نوع رو در خودش داشته باشه ، پس ترکیبی هست

struct student
{
int id;
char name[25];
float score;
};

ولی مثلا نوع داده int فقط یک نوع داده اونم فقط عدد میگیره (اسکالر)

برای اینکه مبحث مرتبط با بحث php باشه باید بگم با تابع is_scalar میتونید بفهمید که متغیری که دارین استفاده میکنین از نوع اسکالر هست یا نه.
تابع is_scalar (http://us1.php.net/is_scalar)

MMSHFE
سه شنبه 21 آبان 1392, 19:31 عصر
توی PHP نوع char و به تبع اون، string جزو انواع Scalar محسوب نمیشه. بطور کلی انواعی که میشه روی اونها Scale داشت (مقیاس بندی کرد) رو Scalar میگن. مثلاً میتونیم بگیم 5 دو برابر 2.5 هست ولی نمیتونیم بگیم ali دوبرابر reza هست. نوع boolean هم چون در اصل بصورت عددی (صفر و یک) ذخیره میشه، جزو انواع Scalar محسوب میشه.
http://php.net/manual/en/function.is-scalar.php

ابوذر محمودی
سه شنبه 21 آبان 1392, 19:36 عصر
مطمئن هستید تو php رشته اسکالر نیست؟ بذارین تو سایت php.net جستجو کنم

ابوذر محمودی
سه شنبه 21 آبان 1392, 19:39 عصر
PHP supports eight primitive types.

Four scalar types:

boolean
integer
float (floating-point number, aka double)
string

اینجا تو سایت http://php.net/ نوشته که از 4 نوع اسکالر پشتیبانی میکنه
language.types.intro.php (http://php.net/manual/en/language.types.intro.php)

حتی تابع is_scalar رو هم الان چک کردم ، برای نوع رشته مقدار یک برمیگردونه.

MMSHFE
سه شنبه 21 آبان 1392, 19:44 عصر
Scalar variables are those containing an integer, float, string or boolean. Types array, object and resource are not scalar.
راستش من طبق این گفته توی لینکی که گذاشتم گفتم چون string هم آرایه از نوع char هست. اما الآن که تست کردم دیدم حق با شماست. البته char قاعدتاً باید Scalar باشه چون بصورت کد کارکتر (int) ذخیره میشه ولی string رو شک داشتم که دیدم اونهم Scalar هست. کد تست:

echo is_scalar('ali'); // output: 1
گویا Document خود سایت PHP هم نیاز به اصلاحات داره. تناقض موجود رو Report کردم.

ابوذر محمودی
سه شنبه 21 آبان 1392, 20:08 عصر
البته تو نوع خود رشته منم شک دارم ، ولی char اسکالره ، چون تو کتاب پرات جزو اسکالرها بود و من منبع معتبر تری برای اثبات خلافش ندارم.
من استدلالم اینه که چون رشته آرایه ای از کاراکترهاس پس نتیجه اینکه اسکالر نیست، چون خود آرایه طبق همین سایت اسکالر نیست .
شاید واسه برخی زبان ها که مستقیماً نوع رشته ای دارن این صدق نکنه

ravand
سه شنبه 21 آبان 1392, 21:21 عصر
در مورد متغییر های اسکالر در شی گرایی هم خوندم . که با var شروع میشن اونا چه فرقی با اینا دارن؟

MMSHFE
چهارشنبه 22 آبان 1392, 08:09 صبح
ارتباطی نداره. var کلاً یک کلمه کلیدی در PHP هست که با کمکش میشه متغیر رو بدون مقداردهی اولیه تعریف کرد. حالا این متغیر اگه مقدارش یکی از انواع مشخص شده از نوع Scalar باشه، میشه اسکالر وگرنه اسکالر نیست.

ravand
شنبه 17 اسفند 1392, 14:29 عصر
ارتباطی نداره. var کلاً یک کلمه کلیدی در PHP هست که با کمکش میشه متغیر رو بدون مقداردهی اولیه تعریف کرد. حالا این متغیر اگه مقدارش یکی از انواع مشخص شده از نوع Scalar باشه، میشه اسکالر وگرنه اسکالر نیست.
پس این متغییر هایی که با var شروع میشن اسکالر نیستن؟ و اسمشون چیه؟ من هنوز نفهمیدم دلیل اصلی استفاده از این متغییر ها چی هست؟ شما گفتید بدون مقداردهی اولیه تعریف میشن. یعنی مقداری بهشون ندیم به این شکل؟

var $mo;
آیا منظورتون چیز دیگه ای بود؟
شایدم منظورتون اینه که برای اینکه متغییر از نوع عمومی و خصوصی و... نباشه ما از var استفاده می کنیم؟
مثلا اینطوری؟

public $mo="mo";
چون به این صورت وقتی داخل کلاس گذاشتم اخطار داد:

$mo="mo";
متشکرم.