دو دوست: Py و JS | چند چیز جالب درباره جاوااسکریپت و پایتون، و مقایسه با هم

دو دوست: Py و JS | چند چیز جالب درباره جاوااسکریپت و پایتون، و مقایسه با همتقریبا از وقتی که شروع به برنامه‌نویسی کردم، تا چند وقت پیش، بیشتر کارام با پایتون بود. کم و بیش به بقیه زبون‌ها هم سَرَک می‌کشیدم ولی کلا با پایتون یجور دیگه بودم؛ اما دیگه وقت دل‌کندن بود:) چند وقت بود که میخواستم کلا برم سمت طراحی سایت (front-end البته) و برنامه‌های دسکتاپ، و اگه سعادت شد برنامه‌های موبایل. کلا به این تیپ از کارها علاقه داشتم. https://virgool.io/@mmt/%DB%8C%D8%A7%D8%AF%D8%AF%D8%A7%D8%B4%D8%AA-%D9%87%D8%A7%DB%8C%DB%8C-%D8%AF%D8%B1%D8%A8%D8%A7%D8%B1%D9%87-%D9%86%D9%88%D8%B4%D8%AA%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%DA%AF%D8%B1%D8%A7%D9%81%DB%8C%DA%A9%DB%8C-df39kzc2adtu تصمیم گرفتم که سمت JS (جاوااسکریپت) برم، چون هم یادگیریش برام راحت‌تر بود، هم قدرتمندتر (به لطف لایبری‌های متنوع اون). سعی می‌کنیم بیشتر مقایسه و تحلیل کنیم تا آموزشِ ۰ تا ۱۰۰. اگه قراره از پایتون به جاوااسکریپت برید یا برعکس، حتما پیشنهاد میشه که بخونید:) اول درباره تفاوت‌ها حرف میزنیم:در واقع ما توی پایتون، چیزی به اسم undefined نداریم (البته مشابه اون None هست اما بنظرم نمیشه اونو معادل دونست). یکم کلی‌تر بگم، یه «هیچی» توی پایتون و سه تا «هیچی» توی جاوااسکریپت وجود داره!python: NoneJS: NaN, null, undefinedالبته این ۳ مورد با هم فرق دارن، مثلا null یه نوع object تلقی میشه اما مال undefined میشه undefined، نوع NaN میشه number. البته درباره NaN از دیدِ typeof یه عدده، وگرنه یکم از دید ریاضی ممکنه فرق کنه. ببینید:console.log(0/0) // NaN
console.log(Math.sqrt(-1)) // NaN https://stackoverflow.com/questions/50320711/what-is-the-difference-between-null-nan-and-undefined-in-javascript meme = nullمعمولا توی پایتون از همون None استفاده میشه. مثلا تابع‌هایی که خودشون return ندارن، None رو برمی‌گردونن (مثلا تابع print). مثلا:>>> print(&quottest!&quot) == None
Trueتوی پایتون دو نوع روش، و توی جاوااسکریپت سه نوع روش برای تعریف تابع داریم:python: function(using “def” keyword), lambdaJS: function(using “function” keyword), inline function, anonymous functionتوی پایتون، لامبدا و تابع فرق زیادی ندارن ولی در کل متفاون از همدیگه هستن، بخاطر شباهت زیادشون ازش به عنوان «تابع» نام بردم، دقت کنید:) توی جاوااسکریپت، تابع (عادی) با تابع‌های خطی و ناشناس کمی فرق داره، اما توابع خطی و ناشناس مشابه همدیگه هستن. https://stackoverflow.com/questions/12264834/what-is-the-difference-for-python-between-lambda-and-regular-function https://stackoverflow.com/questions/19159703/what-is-the-difference-between-anonymous-and-inline-functions-in-javascript python:def f(x):
return x*2
# or
f = lambda x: x*2JS:function f(x){
return x*2;
}
// or
const f = function(x){
return x*2;
}
// or
const f = (x) => {
return x*2;
}
const f = x => x*2 ;برخلاف پایتون و اکثر زبان‌های دیگه، توی جاوااسکریپت دو نوع علامت برای بررسی مساوی بودن تو مقدار داریم: “==” و “===” ! حالا فرقشون چیه؟ مطالعه بفرمایید: https://stackoverflow.com/questions/359494/which-equals-operator-vs-should-be-used-in-javascript-comparisons https://stackoverflow.com/questions/523643/difference-between-and-in-javascript خلاصه که === از == سخت‌گیرتره! اما توی پایتون و اکثر زبون‌های دیگه فقط == در این باره وجود داره که کارکردش مشخصه (البته یه کلمه کلیدی توی پایتون هم هست به اسم is، اینجا بخونید دربارش)با پارامترهای تابع که آشنا هستید. توی پایتون و جاوااسکریپت قائده کلی تقریبا یکیه؛ اما اگه قراره کمی حرفه‌ای‌تر باشید باید بدونید که راه‌های مختلفی توی هرکدوم هست:توی پایتون شما میتونید چند پارامتر بگیرید و اونارو بصورت تاپل(tuple) یا دیکشنری(dictionary) دریافت کنید. مثلا:def f(a, *b, **c):
print(f&quot* a = {a}n* b = {b}n* c = {c}&quot)

f(&quotarg&quot, 1, 2, 3, f=&quotfirst&quot, s=&quotsecond&quot, t=&quotthird&quot)
# * a = arg
# * b = (1, 2, 3)
# * c = {‘f’: ‘first’, ‘s’: ‘second’, ‘t’: ‘third’}توی جاوااسکریپت شما میتونید چند تا پارامتر رو بصورت یه لیست(Array) دریافت کنید. البته لازم به ذکر هستش که تحت هر شرایطی، حتی اگه پارامترهای تابع رو تعیین نکرده باشید (که توی پایتون TypeError میگیرید) ، پارامترها توی متغیر arguments نگه داشته میشن(بصورت object). مثلا:function f(a, …b){
console.log(`* a = ${a}n* b = ${b}n* arguments = ${arguments}`)
}
f(&quotarg&quot, 1, 2, 3)
// * a = 1
// * b = 2,3,4,5
// * arguments = [object Arguments]نمیدونم فقط من اینجوریم یا که نه، ولی این دوتارو بجای هم بکار میبرم:) در واقع self (پایتون) و this (جاوااسکریپت) کارکرد یکسانی دارن. البته صرفا جهت اطلاع که this میتونه توی object هم بکار بره و فقط برای کلاس نیست.برای کسی که پایتون کار کرده و میخواد با چیزی شبیه dictionary توی جاوااسکریپت کار کنید، استفاده از object گزینه مناسبیه! هم تعریف کردن و هم استفاده کردن ازش مثل اونه، که از نظر کارکرد اونو شبیه میکنه، و البته چند تا ویژگی جالب دیگه هم داره که اگه اونو یاد بگیرید متوجه تفاوت‌هاشون میشید؛ البته توی جاوااسکریپت نمیشه از for یا if-else توی تعریفش استفاده کرد. فعلا مثال رو ببینید:s = {&quota&quot: 2, &quotb&quot: 4, 3: 5, &quothello world&quot: &quotsalam donya&quot} # Py & JS
s[&quota&quot] = 3 // Py & JS
x = s[&quotsalam donya&quot] # Py & JS
s.b += 10 // only JS
t = {x:y for (x,y) in [(1,2),(3,4)]} # only Pyچند مورد که توی پایتون و جاوااسکریپت شبیه هم هستند و فرق زیادی ندارد رو میتونید ببینید:کلاس‌ها:// JS
class NAME extends PARENT {
constructor(…){
super(…)
}
}# Py
class NAME(PARENT):
def __init__(self, …):
super(…)
…دقت کنید که self ای که بکار برده شده با پارامترهایی که ما معمولا سروکار داریم فرق داره. در واقع self از قبل تنظیم میشه و به خود کلاس فعلی اشاره می‌کنه (البته اینکه «اشاره‌گر» باشه بعید میدونم تعریف خوبی باشه، ولی اینو میشه گفت که به خود کلاسی که init میکنید اشاره میکنه، و نه چیز دیگه). رشته(string)ها:// JS
a = &quottext&quot
b = `hello
JS!`
c = `9 is ${9===8?&quotequal&quot:&quotnot equal&quot} to 8`# Py
a = &quottext&quot
b = &quot&quot&quothelo
Python!&quot&quot&quot
c = f&quotsum of 1, 2, 3 is {1 + 2 + 3}&quotو در باب(!) کتابخونه‌ها:// JS
import name from &quotmodule-name&quot
import {a, b as B, …} from &quotmodule-name&quot
import * as name from &quotmodule-name&quot
import name, {a, b as B, …} from &quotmodule-name&quot
import name from &quot/path/to/file.js&quot# Py
import name
import name as newName
from name import a, b as B, …
from name import *البته import کردن یه فایل توی پایتون یکم بیشتر کار داره. اگه میخواید یه فایل رو فراخوانی کنید، اینجا رو ببینید (من خودم روش apeend کردن مسیر به sys.path رو می‌پسندم) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import https://docs.python.org/3/reference/import.html https://realpython.com/python-import/ هر کدوم از این زبون‌ها کاربرد خودشونو دارن، و چیزی که مهمه اینه که ما برنامه‌نویسی رو بلد باشیم و متناسب با نیازمون سمت یه زبان بریم، و بدونید که هیچ زبونی از زبون دیگه بهتر نیست؛ اما Brainf بهترینه:)سعی کردم بیشتر چیزایی که باهاشون کار کرده بودم رو نوشتم، اگه چیزی از قلم افتاد بگید توی کامنت‌ها خوشحال میشم:)

Author: admin

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *