ورود به حساب

نام کاربری گذرواژه

گذرواژه را فراموش کردید؟ کلیک کنید

حساب کاربری ندارید؟ ساخت حساب

ساخت حساب کاربری

نام نام کاربری ایمیل شماره موبایل گذرواژه

برای ارتباط با ما می توانید از طریق شماره موبایل زیر از طریق تماس و پیامک با ما در ارتباط باشید


09117307688
09117179751

در صورت عدم پاسخ گویی از طریق پیامک با پشتیبان در ارتباط باشید

دسترسی نامحدود

برای کاربرانی که ثبت نام کرده اند

ضمانت بازگشت وجه

درصورت عدم همخوانی توضیحات با کتاب

پشتیبانی

از ساعت 7 صبح تا 10 شب

دانلود کتاب Grokking Functional Programming

دانلود کتاب برنامه نویسی تابعی Grokking

Grokking Functional Programming

مشخصات کتاب

Grokking Functional Programming

دسته بندی: برنامه نویسی: زبان های برنامه نویسی
ویرایش: 1 
نویسندگان:   
سری:  
ISBN (شابک) : 9781617291838 
ناشر: Manning Publications 
سال نشر: 2022 
تعداد صفحات: 522 
زبان: English 
فرمت فایل : PDF (درصورت درخواست کاربر به PDF، EPUB یا AZW3 تبدیل می شود) 
حجم فایل: 62 مگابایت 

قیمت کتاب (تومان) : 33,000



کلمات کلیدی مربوط به کتاب برنامه نویسی تابعی Grokking: چند رشته ای، همزمانی، برنامه نویسی تابعی، پردازش جریانی، اسکالا، مدیریت خطا، تست، توابع خالص



ثبت امتیاز به این کتاب

میانگین امتیاز به این کتاب :
       تعداد امتیاز دهندگان : 2


در صورت تبدیل فایل کتاب Grokking Functional Programming به فرمت های PDF، EPUB، AZW3، MOBI و یا DJVU می توانید به پشتیبان اطلاع دهید تا فایل مورد نظر را تبدیل نمایند.

توجه داشته باشید کتاب برنامه نویسی تابعی Grokking نسخه زبان اصلی می باشد و کتاب ترجمه شده به فارسی نمی باشد. وبسایت اینترنشنال لایبرری ارائه دهنده کتاب های زبان اصلی می باشد و هیچ گونه کتاب ترجمه شده یا نوشته شده به فارسی را ارائه نمی دهد.


توضیحاتی در مورد کتاب برنامه نویسی تابعی Grokking

نیازی به ترس از عملکردی شدن وجود ندارد! این راهنمای دوستانه، پر جنب و جوش و جذاب برای هر برنامه نویس گیج عالی است. اصول برنامه نویسی کاربردی را به روشی ساده و مختصر بیان می کند که به شما کمک می کند بفهمید FP واقعاً چه چیزی است. در برنامه نویسی تابعی Grokking یاد خواهید گرفت: • طراحی با توابع و انواع به جای اشیا • برنامه نویسی با توابع خالص و مقادیر تغییرناپذیر • نوشتن برنامه های همزمان با استفاده از سبک عملکردی • آزمایش برنامه های کاربردی • چندین رویکرد یادگیری برای کمک به شما در رشد هر مفهوم جدید اگر تا به حال متوجه شده اید که چشمان خود را روی برنامه نویسی کاربردی می چرخانید، این کتاب برای شماست. برنامه‌نویسی تابعی Grokking را باز کنید و ایده‌های کاربردی را بر روی آنچه قبلاً به عنوان یک برنامه‌نویس شی‌گرا می‌شناسید، نگاشت خواهید یافت. این کتاب از صفحه اول بر جنبه های عملی تمرکز دارد. مثال‌های عملی اصول عملکردی را برای کارهای برنامه‌نویسی روزمره مانند همزمانی، مدیریت خطا و بهبود خوانایی اعمال می‌کنند. به علاوه، پازل ها و تمرین ها به شما امکان می دهند به آنچه یاد می گیرید فکر کنید و تمرین کنید. به زودی به یک لحظه شگفت انگیز "آها" خواهید رسید و شروع به دیدن کد به روشی کاملاً جدید خواهید کرد. در مورد تکنولوژی در نهایت، یک راه آسان برای یادگیری برنامه نویسی تابعی وجود دارد! این کتاب منحصر به فرد با ایده های آشنای OOP شروع می شود و FP را گام به گام با استفاده از مثال های مرتبط، تمرین های جذاب و بسیاری از تصاویر معرفی می کند. از اینکه چقدر سریع شروع به دیدن وظایف نرم افزاری از این دیدگاه جدید ارزشمند خواهید کرد، شگفت زده خواهید شد. درباره کتاب برنامه نویسی تابعی Grokking برنامه نویسی کاربردی را به توسعه دهندگان ضروری معرفی می کند. شما با کارهای کدنویسی کوچک و راحت شروع می‌کنید که مفاهیم اساسی مانند نوشتن توابع خالص و کار با داده‌های تغییرناپذیر را نشان می‌دهد. در طول مسیر، یاد خواهید گرفت که چگونه کد بنویسید که باگ های رایج ناشی از وضعیت توزیع پیچیده را حذف کند. شما همچنین رویکرد FP به IO، همزمانی و جریان داده را بررسی خواهید کرد. تا پایان کار، کدهای کاربردی تمیزی می نویسید که درک، آزمایش و نگهداری آن آسان است. داخلش چیه • طراحی با توابع و انواع به جای اشیا • برنامه نویسی با توابع خالص و مقادیر تغییرناپذیر • نوشتن برنامه های همزمان با استفاده از سبک عملکردی • آزمایش برنامه های کاربردی درباره خواننده برای توسعه دهندگانی که زبان شی گرا می دانند. نمونه هایی در جاوا و اسکالا. درباره نویسنده Michal Plachta یک توسعه دهنده نرم افزار با تجربه است که به طور مرتب در مورد ایجاد برنامه های کاربردی قابل نگهداری صحبت می کند و می نویسد.


توضیحاتی درمورد کتاب به خارجی

There’s no need to fear going functional! This friendly, lively, and engaging guide is perfect for any perplexed programmer. It lays out the principles of functional programming in a simple and concise way that will help you grok what FP is really all about. In Grokking Functional Programming you will learn: • Designing with functions and types instead of objects • Programming with pure functions and immutable values • Writing concurrent programs using the functional style • Testing functional programs • Multiple learning approaches to help you grok each new concept If you’ve ever found yourself rolling your eyes at functional programming, this is the book for you. Open up Grokking Functional Programming and you’ll find functional ideas mapped onto what you already know as an object-oriented programmer. The book focuses on practical aspects from page one. Hands-on examples apply functional principles to everyday programming tasks like concurrency, error handling, and improving readability. Plus, puzzles and exercises let you think and practice what you're learning. You’ll soon reach an amazing “aha” moment and start seeing code in a completely new way. About the technology Finally, there’s an easy way to learn functional programming! This unique book starts with the familiar ideas of OOP and introduces FP step-by-step using relevant examples, engaging exercises, and lots of illustrations. You’ll be amazed at how quickly you’ll start seeing software tasks from this valuable new perspective. About the book Grokking Functional Programming introduces functional programming to imperative developers. You’ll start with small, comfortable coding tasks that expose basic concepts like writing pure functions and working with immutable data. Along the way, you’ll learn how to write code that eliminates common bugs caused by complex distributed state. You’ll also explore the FP approach to IO, concurrency, and data streaming. By the time you finish, you’ll be writing clean functional code that’s easy to understand, test, and maintain. What's inside • Designing with functions and types instead of objects • Programming with pure functions and immutable values • Writing concurrent programs using the functional style • Testing functional programs About the reader For developers who know an object-oriented language. Examples in Java and Scala. About the author Michal Plachta is an experienced software developer who regularly speaks and writes about creating maintainable applications.



فهرست مطالب

Functional Programming
contents
preface
acknowledgments
about this book
about the authors
Part 1 The functional toolkit
	1 Learning functional programming
		Perhaps you picked up this book because...
		What do you need to know before we start?
		What do functions look like?
		Meet the function
		When the code lies...
		Imperative vs. declarative
		Coffee break: Imperative vs. declarative
		Coffee break explained: Imperative vs. declarative
		How useful is learning functional programming?
		Leaping into Scala
		Practicing functions in Scala
		Getting your tools ready
		Getting to know the REPL
		Writing your first functions!
		How to use this book
	2 Pure functions
		Why do we need pure functions?
		Coding imperatively
		Breaking the code
		Passing copies of the data
		Breaking the code . . . again
		Recalculating instead of storing
		Focusing on the logic by passing the state
		Where did the state go?
		The difference between impure and pure functions
		Coffee break: Refactoring to a pure function
		Coffee break explained: Refactoring to a pure function
		In pure functions we trust
		Pure functions in programming languages
		Difficulty of staying pure...
		Pure functions and clean code
		Coffee break: Pure or impure?
		Coffee break explained: Pure or impure?
		Using Scala to write pure functions
		Practicing pure functions in Scala
		Testing pure functions
		Coffee break: Testing pure functions
		Coffee break explained: Testing pure functions
	3 Immutable values
		The fuel for the engine
		Another case for immutability
		Can you trust this function?
		Mutability is dangerous
		Functions that lie... again
		Fighting mutability by working with copies
		Coffee break: Getting burned by mutability
		Coffee break explained: Getting burned by mutability
		Introducing shared mutable state
		State’s impact on programming abilities
		Dealing with the moving parts
		Dealing with the moving parts using FP
		Immutable values in Scala
		Building our intuition about immutability
		Coffee break: The immutable String API
		Coffee break explained: The immutable String API
		Hold on . . . Isn’t this bad?
		Purely functional approach to shared mutable state
		Practicing immutable slicing and appending
	4 Functions as values
		Implementing requirements as functions
		Impure functions and mutable values strike back
		Using Java Streams to sort the list
		Function signatures should tell the whole story
		Changing requirements
		We just pass the code around!
		Using Java’s Function values
		Using the Function syntax to deal with code duplication
		Passing user-defined functions as arguments
		Coffee break: Functions as parameters
		Coffee break explained: Functions as parameters
		Problems with reading functional Java
		Passing functions in Scala
		Deep dive into sortBy
		Signatures with function parameters in Scala
		Passing functions as arguments in Scala
		Practicing function passing
		Embracing declarative programming
		Passing functions to custom-made functions
		Small functions and their responsibilities
		Passing functions inline
		Coffee break: Passing functions in Scala
		Coffee break explained: Passing functions in Scala
		What else can we achieve just by passing functions?
		Applying a function to each element of a list
		Applying a function to each element of a list using map
		Getting to know map
		Practicing map
		Learn once, use everywhere
		Returning parts of the list based on a condition
		Returning parts of the list using filter
		Getting to know filter
		Practicing filter
		Our journey so far...
		Don’t repeat yourself?
		Is my API easy to use?
		Adding a new parameter is not enough
		Functions can return functions
		Using functions that can return functions
		Functions are values
		Coffee break: Returning functions
		Coffee break explained: Returning functions
		Designing functional APIs
		Iterative design of functional APIs
		Returning functions from returned functions
		How to return functions from returned functions
		Using the flexible API built with returned functions
		Using multiple parameter lists in functions
		We have been currying!
		Practicing currying
		Programming by passing function values
		Reducing many values into a single value
		Reducing many values into a single one using foldLeft
		Getting to know foldLeft
		foldLeft must-knows
		Practicing foldLeft
		Modeling immutable data
		Using product types with higher-order functions
		More concise syntax for inline functions
Part 2 Functional programs
	5 Sequential programs
		Writing pipeline-based algorithms
		Composing larger programs from smaller pieces
		The imperative approach
		flatten and flatMap
		Practical use case of using more flatMaps
		flatMap and changing the size of the list
		Coffee break: Dealing with lists of lists
		Coffee break explained: Dealing with lists of lists
		Chained flatMaps and maps
		Nested flatMaps
		Values that depend on other values
		Practicing nested flatMaps
		A better syntax for nested flatMaps
		For comprehensions to the rescue!
		Coffee break: flatMaps vs. for comprehensions
		Coffee break explained: flatMaps vs. for comprehensions
		Getting to know for comprehensions
		It’s not the for you are looking for!
		Inside a for comprehension
		More sophisticated for comprehensions
		Checking all combinations using a for comprehension
		Filtering techniques
		Coffee break: Filtering techniques
		Coffee break explained: Filtering techniques
		Looking for a greater abstraction
		Comparing map, foldLeft, and flatMap
		Using for comprehensions with Sets
		Using for comprehensions with many types
		Practicing for comprehensions
		Defining for comprehensions... again
		Using for comprehensions with noncollection types
		Avoiding nulls: Option type
		Parsing as a pipeline
		Coffee break: Parsing with Option
		Coffee break explained: Parsing with Option
	6 Error handling
		Handling lots of different errors, gracefully
		Is it even possible to handle them all?
		Sort the list of TV shows by their running time
		Implementing the sorting requirement
		Dealing with data coming from the outside world
		Functional design: Building from small blocks
		Parsing Strings into immutable objects
		Parsing a List is just parsing one element
		Parsing a String into a TvShow
		What about potential errors?
		Is returning null a good idea?
		How do we handle potential errors more gracefully?
		Implementing a function that returns an Option
		Option forces us to handle possible errors
		Building from small blocks
		Functional design is building from small blocks
		Writing a small, safe function that returns an Option
		Functions, values, and expressions
		Practicing safe functions that return Options
		How do errors propagate?
		Values represent errors
		Option, for comprehensions, and checked exceptions...
		What about checked exceptions?
		Conditional recovery
		Conditional recovery using the imperative style
		Checked exceptions don’t compose—Options do!
		How does orElse work?
		Practicing functional error handling
		Functions compose, even in the presence of errors
		Compiler reminds us that errors need to be covered
		Compilation errors are good for us!
		Transforming a List of Options into a flat List
		Let the compiler be our guide...
		...but let’s not trust the compiler too much!
		Coffee break: Error-handling strategies
		Coffee break explained: Error-handling strategies
		Two different error-handling strategies
		All-or-nothing error-handling strategy
		Folding a List of Options into an Option of a List
		We now know how to handle multiple possible errors!
		How to know what failed
		We need to convey error details in the return value
		Conveying error details using Either
		Refactoring to Either
		Returning an Either instead of an Option
		Practicing safe functions that return Either
		What we learned about Option works with  Either
		Coffee break: Error handling using Either
		Coffee break explained: Error handling using Either
		Working with Option/Either
	7 Requirements as types
		Modeling data to minimize programmers’ mistakes
		Well-modeled data can’t lie
		Designing using what we know so far (which is primitive types)
		Using data modeled as primitive types
		Coffee break: The pain of primitive types
		Coffee break explained: The pain of primitive types
		Problems with the primitive type approach to modeling
		Using primitive types makes our jobs harder!
		Newtypes protect against misplaced parameters
		Using newtypes in data models
		Practicing newtypes
		Making sure only valid data combinations are possible
		Modeling possibility of absence in your data
		Changes in the model force changes in the logic
		Using data modeled as Options in your logic
		Higher-order functions for the win!
		There is probably a higher-order function for that!
		Coffee break: forall/exists/contains
		Coffee break explained: forall/exists/contains
		Coupling a concept inside a single product type
		Modeling finite possibilities
		Using sum types
		Even better modeling with sum types
		Using the sum type + product type combo
		Product types + sum types = algebraic data types (ADTs)
		Using ADT-based models in behaviors (functions)
		Destructuring ADTs using pattern matching
		Duplication and DRY
		Practicing pattern matching
		Newtypes, ADTs, and pattern matching in the wild
		What about inheritance?
		Coffee break: Functional data design
		Coffee break explained: Functional data design
		Modeling behaviors
		Modeling behaviors as data
		Implementing functions with ADT-based parameters
		Coffee break: Design and maintainability
		Coffee break explained: Design and maintainability
	8 IO as values
		Talking to the outside world
		Integrating with an external API
		Properties of a side-effectful IO action
		Imperative solution to side-effecting IO code
		Problems with the imperative approach to IO
		Can we really do better using FP?
		Doing IO vs. using IO’s result
		Handling IO imperatively
		Computations as IO values
		IO values
		IO values in the wild
		Pushing the impurity out
		Using values fetched from two IO actions
		Combining two IO values into a single IO value
		Practicing creating and combining IO values
		Disentangling concerns by working with values only
		The IO type is viral
		Coffee break: Working with values
		Coffee break explained: Working with values
		Toward functional IO
		What about IO failures?
		Running a program described by IO may fail!
		Remember orElse?
		Lazy and eager evaluation
		Implementing recovery strategies using IO.orElse
		Implementing fallbacks using orElse and pure
		Practicing failure recovery in IO values
		Where should we handle potential failures?
		Toward functional IO with failure handling
		Pure functions don’t lie, even in the unsafe world!
		Functional architecture
		Using IO to store data
		Coffee break: Using IO to store data
		Coffee break explained: Using IO to store data
		Treating everything as values
		Treating retries as values
		Treating an unknown number of API calls as values
		Practicing functional signature intuitions
	9 Streams as values
		To infinity and beyond
		Dealing with an unknown number of values
		Dealing with external impure API calls (again)
		The functional approach to the design
		Immutable maps
		Practicing immutable maps
		How many IO calls should we make?
		The bottom-up design
		Advanced list operations
		Introducing tuples
		Zipping and dropping
		Pattern matching on tuples
		Coffee break: Working with maps and tuples
		Coffee break explained: Working with maps and tuples
		Functional jigsaw puzzle
		Following types in a bottom-up design
		Prototyping and dead ends
		Recursive functions
		Infinity and laziness
		Recursive function structure
		Dealing with an absence in the future (using recursion)
		Usefulness of infinite recursive calls
		Coffee break: Recursion and infinity
		Coffee break explained: Recursion and infinity
		Creating different IO programs using recursion
		Using recursion to make an arbitrary number of calls
		Problems with the recursive version
		Introducing data streams
		Streams in imperative languages
		Values on demand
		Stream processing, producers, and consumers
		Streams and IO
		The functional Stream
		Streams in FP are values
		Streams are recursive values
		Primitive operations and combinators
		Streams of IO-based values
		Infinite streams of IO-based values
		Executing for side effects
		Practicing stream operations
		Using streams to our advantage
		Infinite stream of API calls
		Handling IO failures in streams
		Separated concerns
		Sliding windows
		Waiting between IO calls
		Zipping streams
		Benefits of using the stream-based approach
	10 Concurrent programs
		Threads, threads everywhere
		Declarative concurrency
		Sequential vs. concurrent
		Coffee break: Sequential thinking
		Coffee break explained: Sequential thinking
		The need for batching
		Batching implementation
		The concurrent world
		The concurrent state
		Imperative concurrency
		Atomic references
		Introducing Ref
		Updating Ref values
		Using Ref values
		Making it all concurrent
		parSequence in action
		Practicing concurrent IOs
		Modeling concurrency
		Coding using Refs and fibers
		IOs that run infinitely
		Coffee break: Concurrent thinking
		Coffee break explained: Concurrent thinking
		The need for asynchronicity
		Preparing for asynchronous access
		Designing functional asynchronous programs
		Managing fibers manually
		Coding functional asynchronous programs
Part 3 Applied functional programming
	11 Designing functional programs
		Make it work, make it right, make it fast
		Modeling using immutable values
		Business domain modeling and FP
		Data access modeling
		A bag of functions
		Business logic as a pure function
		Separating the real data access concern
		Integrating with APIs using imperative libraries and IO
		Following the design
		Implementing input actions as IO values
		Separating the library IO from other concerns
		Currying and inversion of control
		Functions as values
		Connecting the dots
		We made it work
		Making it right
		Resource leaks
		Handling resources
		Using a Resource value
		We made it right
		Coffee break: Make it fast
		Coffee break explained: Make it fast
	12 Testing functional programs
		Do you have tests for that?
		Tests are just functions
		Choosing functions to test
		Testing by providing examples
		Practicing testing by example
		Generating good examples
		Generating properties
		Property-based testing
		Testing by providing properties
		Delegating the work by passing functions
		Understanding failures of property-based tests
		Wrong test or a bug?
		Custom generators
		Using custom generators
		Testing more complicated scenarios in a readable way
		Finding and fixing bugs in the implementation
		Coffee break: Property-based tests
		Coffee break explained: Property-based tests
		Properties and examples
		Requirements coverage
		Testing side-effectful requirements
		Identifying the right test for the job
		Data usage tests
		Practicing stubbing external services using IO
		Testing and design
		Service integration tests
		Local servers as Resources in integration tests
		Writing isolated integration tests
		Integration with a service is a single responsibility
		Coffee break: Writing integration tests
		Coffee break explained: Writing integration tests
		Integration tests take more time
		Property-based integration tests
		Choosing the right testing approach
		Test-driven development
		Writing a test for a feature that doesn’t exist
		Red green refactor
		Making tests green
		Adding more red tests
		The last TDD iteration
Appendix A: Scala cheat sheet
Appendix B: Functional gems
index
	A
	B
	C
	D
	E
	F
	G
	H
	I
	J
	L
	M
	N
	O
	P
	Q
	R
	S
	T
	U
	V
	W
	Y
	Z




نظرات کاربران