کد نویسی استاندارد
با سلام
من تا قسمت استفاده از UI اندروید در جاوا را دیدم و سعی کردم که یک نرم افزار ساده بسازم که بتونه :
دنباله فیبوناچی
فاکتوریل
توان خود عدد
بررسی اول بودن
و با زدن یک دکمه، دکمه های چهارعمل اصلی ظاهر میشه و دکمه هایی که اعمال بالا را انجام می دهند پنهان می شوند
من با توجه به دانش کم برنامه نویسی ام سعی کردم خیلی منظم و کوتاه بنویسم
حالا می خوام یکی از دوستان برنامه را به خصوص نحوه استفاده از متغییر ها را چک کند و ببیند استاندارد هست یا نه.
کل پروژه را آپلود کردم :
http://www.98up.in/uploads/up789531391872695_mathtools.zip
بهتر بود فقط سورس رو درج میکردید ، دانلود ایمپورت زمانبره !
package sakifard.morteza.app.mathtools;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MathtoolsActivity extends Activity {
public long result = 0;
public float convert1 = 0f;
public float convert2 = 0f;
public long fibonacci(int n) {
int a = 1;
int b = 1;
int c = 0;
for (int i = 1; i <= n - 2; i++) {
c = a + b;
a = b;
b = c;
}
return b;
}
public boolean checkaval(int n) {
for (int i = 2; i <= n / 2; i++) {
if (n % i == 0)
return false;
}
return true;
}
public long factorial(int n) {
long result = 1;
for (int i = n; i >= 2; i--)
result *= i;
return result;
}
public long tavan(int n) {
long result = n * n;
for (int i = 1; i < n - 1; i++)
result *= n;
return result;
}
public int convertstrtoint() {
final EditText edtInput = (EditText) findViewById(R.id.edtInput);
String userInput = edtInput.getText().toString();
final int value = Integer.parseInt(userInput);
return value;
}
public void convertstrtofloat() {
final EditText edtInput = (EditText) findViewById(R.id.edtInput);
String userInput = edtInput.getText().toString();
convert1 = Float.parseFloat(userInput);
final EditText edtInput2 = (EditText) findViewById(R.id.edtInput2);
String userInput2 = edtInput2.getText().toString();
convert2 = Float.parseFloat(userInput2);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TextView txtshow = (TextView) findViewById(R.id.txtshow);
final Button btntavan = (Button) findViewById(R.id.btntavan);
final Button btnaval = (Button) findViewById(R.id.btnaval);
final Button btnfibonacci = (Button) findViewById(R.id.btnfibonacci);
final Button btnfactorial = (Button) findViewById(R.id.btnfactorial);
final Button btncalculator = (Button) findViewById(R.id.btncalculator);
final Button btnmod = (Button) findViewById(R.id.btnmod);
final Button btndiv = (Button) findViewById(R.id.btndiv);
final Button btnmul = (Button) findViewById(R.id.btnmul);
final Button btnsub = (Button) findViewById(R.id.btnsub);
final Button btnsum = (Button) findViewById(R.id.btnsum);
final Button btnback = (Button) findViewById(R.id.btnback);
final EditText edtInput2 = (EditText) findViewById(R.id.edtInput2);
final EditText edtInput = (EditText) findViewById(R.id.edtInput);
txtshow.setText("خوش آمدید");
btnback.setVisibility(View.GONE);
btndiv.setVisibility(View.GONE);
btnmod.setVisibility(View.GONE);
btnmul.setVisibility(View.GONE);
btnsum.setVisibility(View.GONE);
btnsub.setVisibility(View.GONE);
edtInput2.setVisibility(View.GONE);
btnfibonacci.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
result = fibonacci(convertstrtoint());
txtshow.setText("نتیجه : " + result);
}
});
btnaval.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (checkaval(convertstrtoint()))
txtshow.setText("عدد " + convertstrtoint() + " اول است");
else
txtshow.setText("عدد " + convertstrtoint() + " اول نیست");
}
});
btnfactorial.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
result = factorial(convertstrtoint());
txtshow.setText("نتیجه : " + result);
}
});
btntavan.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
result = tavan(convertstrtoint());
txtshow.setText("نتیجه : " + result);
}
});
btncalculator.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
btncalculator.setVisibility(View.GONE);
btntavan.setVisibility(View.GONE);
btnaval.setVisibility(View.GONE);
btnfibonacci.setVisibility(View.GONE);
btnfactorial.setVisibility(View.GONE);
btndiv.setVisibility(View.VISIBLE);
btnmod.setVisibility(View.VISIBLE);
btnmul.setVisibility(View.VISIBLE);
btnsum.setVisibility(View.VISIBLE);
btnsub.setVisibility(View.VISIBLE);
btnback.setVisibility(View.VISIBLE);
edtInput2.setVisibility(View.VISIBLE);
}
});
btnsum.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
convertstrtofloat();
txtshow.setText("" + (convert1 + convert2));
}
});
btnsub.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
convertstrtofloat();
txtshow.setText("" + (convert1 - convert2));
}
});
btnmul.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
convertstrtofloat();
txtshow.setText("" + (convert1 * convert2));
}
});
btndiv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
convertstrtofloat();
txtshow.setText("" + (convert1 / convert2));
}
});
btnmod.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
convertstrtofloat();
txtshow.setText("" + (convert1 % convert2));
}
});
btnback.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
btncalculator.setVisibility(View.VISIBLE);
btntavan.setVisibility(View.VISIBLE);
btnaval.setVisibility(View.VISIBLE);
btnfibonacci.setVisibility(View.VISIBLE);
btnfactorial.setVisibility(View.VISIBLE);
btndiv.setVisibility(View.GONE);
btnmod.setVisibility(View.GONE);
btnmul.setVisibility(View.GONE);
btnsum.setVisibility(View.GONE);
btnsub.setVisibility(View.GONE);
btnback.setVisibility(View.GONE);
edtInput2.setVisibility(View.GONE);
}
});
}
}
من اینو گذاشتم که بقیه ام نظر بدن ، اما من نظر خودم رو بصورت انتقال تجربه میگم !
اینها چیزاییه که به مرور تصحیح میشه و در واقع دست خط برنامه نویس هست ، اما اگر میخواید برناهه با عملکرد مناسب و تداخل کم ، و به قول شما استاندارد نوشته باشه ، سعی کنید سطح دسترسی متغییر به کمترین مقداری که نیاز شما رو براورده کنه تغییر بدید !
مثلا وقتی public long result = 0 رو تعریف کردید ، یعنی چی ؟
یعنی که این متغییر دسترسی عمومی از تمام کلاس ها داره ، اما این درحالی که شما از این دسترس استفاده نمیکنید و میشد private باشه و همین طور تا آخر ، من سورس رو کامل نخوندم ، اما مثلا توی کد زیر
for (int i=0;i<10;i++)
{
//do job !
}
چرا موقع تعریف حلقه میگیم int i خوب چون جای دیگه بعد حلقه بهش نیاز نداریم ، پس یک دسترسی محدود فقط داخل اون بلاک کد بهش میدیم ، که تداخلی با بقیه i ها نداره !
شما سعی کن رعایتش کنی ، و حتی روش وقت بزار ، اما خودت رو خیلی درگیر نکن ، هر چی زبان های بیشتر یاد بگیری با ابعاد دیگری از متغییر ها اشنا میشی !
اینم بگم که مثلا میخوای یه آرایه ی یک میلیون عنصری بسازی ، خوب اینجا یه بایت هم یه بایته ! ، پس اگه محلی باشه ، بعد استفاده ازش حافظه آزاد میشه و برنامه بهینست :)
توی اینجور مباحث ما 2 تا متغییر رو در نظر نمیگیریم ، طبق علمی به نام داده ساختار ، باید حد بینهایت داده رو در نظر گرفت ، مثلا میگی 1 بایت رو ولش کن چیزی نیست ، اما بینهایت بایت ، خودش چقدر RAM نیاز داره ؟ (مباحث محاسباتی و سنگینی داره ! )
امیدوارم مفید واقع بشه
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .